许多where子句会影响查询性能吗?

时间:2015-03-10 13:47:06

标签: sql sql-server performance query-optimization

我有动态查询,可能以编程方式生成超过一千个where子句,每个子句都可以像(a列=' 1'和b =' 2')变化。我可以知道一个Sql查询中的这么多条件是否会出现性能问题?列a是varchar max,没有创建索引。它查询的表很大,并由另一列c分区。非常感谢。它是Sql server 2012。

3 个答案:

答案 0 :(得分:0)

是。一千个where条款可能会影响性能。如果可以,我建议使用值创建一个临时表,并使用join作为逻辑。您应该在临时表上创建索引。

注意:您可以在主表上使用技巧,方法是添加一个将列值连接在一起的计算列。然后使用in

alter table t add ab as (a + ':' + b);

create index idx_t_ab on t(ab);

然后将查询修改为:

where ab in ('1:2', . . . )

这对所有应用程序都不适用,但它可能符合您对性能的需求。

答案 1 :(得分:0)

这样效率很低,但如果以这种方式构建查询,查询大小和参数数量也会受到限制,这些参数可能会导致应用程序出错。这些限制并不总是很明显,取决于许多因素,因此可能会导致难以消除的细微错误。

请参阅this question进行讨论。

答案 2 :(得分:0)

尝试在动态查询中组合where子句。对(a,b)值对进行排序后,您可以生成类似

的查询
where a='1' and b in ('2', '5', '7', '8')
or a='2' and b in ('1', '5', '9')