我有以下查詢:簡單查詢幫助 - 爲什麼不是索引被使用?
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