我有以下查询:简单查询帮助 - 为什么不是索引被使用?
SELECT MAX([LastModifiedTime]) FROM Workflow
有大约在工作流程表400M行。 LastModifiedTime列上的索引如下:
CREATE NONCLUSTERED INDEX [IX_Workflow_LastModifiedTime] ON [dbo].[Workflow]
(
[LastModifiedTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100)
上述查询需要1.5分钟执行。为什么SQL Server不使用上述索引并简单地检索索引中的最后一行以获取最大值?
顺便说一下,该查询的查询计划显示index scan
正在完成上述索引。
谢谢。
你可以尝试做一个'UPDATE STATISTICS dbo.Workflow'或'UPDATE STATISTICS dbo.Workflow IX_Workflow_LastModifiedTime',看看是否有什么差别? – 2010-05-27 18:59:54
@marc_s - 它使用索引,但它正在扫描它。为什么它不会落到最后一行呢?这将是最大的价值。除非需要1:30才能在索引中有400M行时下降到最后一行? – 2010-05-27 19:07:04
是的,也许如果你更新的统计数据,查询优化器会发现有太多的行只是扫描 - 并找到一些其他的策略来得到所需的结果.... – 2010-05-27 20:26:06