使用数组作为参数时,任何运算符都会出现严重的性能问题

问题描述 投票:1回答:2

由于某些参数绑定错误,我开始在查询中使用'ANY()'函数而不是'IN'。目前它就是这样的。

Select * 
FROM geo_closure_leaf 
WHERE geoId = ANY(:geoIds)

但它对性能产生巨大影响。使用IN查询比使用ANY快得多。

任何建议如何绑定数组的字符串参数都可以在'IN'表达式中传递。

我试过临时修复使用

Select * 
FROM geo_closure_leaf 
WHERE geoId IN (''('' || array_to_string(:geoIds::text[] ,''),('') || '')'')

Select * 
FROM geo_closure_leaf 
WHERE geoId IN (select unnest(:geoIds::text[]))

geoIds =字符串数组

它正在以这种方式工作。

**public override T Query<T>(string query, IDictionary<string, object> parameters, Func<IDataReader, T> mapper)**
        {
            T Do(NpgsqlCommand command)
            {
                IDataReader reader = null;
                try
                {
                   ** command.CommandText = query;
                    reader = command.AddParameters(parameters).ExecuteReader();**
                    return mapper(reader);
                }
                finally
                {
                    CloseDataReader(reader);
                }
            }

            return Execute(Do);
        }

对象是字符串数组。

预计是:我应该能够做到这一点而无需在sql中添加额外的逻辑。

Select * 
FROM geo_closure_leaf 
WHERE geoId IN (:geoIds)
postgresql query-performance sql-in
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.