【发布时间】:2019-12-04 07:34:10
【问题描述】:
我在 SQL Server 中有一个类似这样的查询。
select sum (col1)
from TableA
where col2 = ?
and col3 = ?
and col4 = in (?, ?, ?... ?)
TableA 在 (col2, col3, col4) 上有一个复合索引。
当IN 运算符列表中的大小增加时,此查询性能不佳。
是否有一种好方法可以重写此查询以获得更好的性能?
列表可以从 1 增加到 300 项。
【问题讨论】:
-
您可以将
in子句的值放在一个表中并加入它。 -
检查查询计划并查看索引是否正常
-
@KedarLimaye 索引正在工作
-
@juergend 你能举个例子吗。您是否建议每次我需要运行查询时创建某种临时表或数据库中已经存在的表并插入其中具有列上的索引并在加入后清除该表。
-
这可能是因为当您扩展要返回的值列表时,您实际上必须返回更多行,这会将您的
Index Scan或Index Seek变成可能的 @ 987654327@。如果没有执行计划、有关表的索引或基数的更多详细信息,我们无法给您准确的答案。
标签: sql sql-server in-operator