【发布时间】:2013-07-04 22:29:44
【问题描述】:
我需要计算在其中一个字段中具有特定值的行数。
让我们说:
SELECT COUNT(1) FROM MyTable WHERE MyField = 'MyValue'
问题是行数超过1.000.000,执行时间太长(超过60s)
我可以在这个特定字段中做些什么来使这个请求运行得更快?
【问题讨论】:
-
您应该在“MyField”列的表格中添加索引。
-
你经常运行这个查询吗?您总是查找相同的值还是不同的值?列中有多少不同的值?根据对这些问题的回答,还可以考虑使用索引视图或过滤索引。
-
基本有 5 个不同的值和 NULL。我使用了这样的非聚集索引:CREATE NONCLUSTERED INDEX INDEX_NAME ON MyTable (MyField ASC)
-
@GMastros 对于上述基数,这有点浪费。
-
@MartinSmith 除了创建索引的执行时间从“(超过 60 秒)”到“不到 1 秒”。这里只是猜测,但我怀疑执行计划现在正在使用索引扫描,但索引只有这一列,因此扫描窄索引而不是扫描(可能是胖)表。
标签: sql sql-server tsql optimization