我使用的是SQL Server 2008中爲什麼這兩個查詢得到類似的時間(大約52秒超過2 milions行)
我需要你爲什麼這兩個查詢得到類似的時間(大約52秒徵求意見超過2百萬行):
查詢1:
DBCC DROPCLEANBUFFERS
DECLARE @curr INT
SET @curr = YEAR(GETDATE())
SELECT MAX([Date])
FROM DB_Item
WHERE YEAR([Date]) = @curr
問題2:
DBCC DROPCLEANBUFFERS
SELECT MAX([Date])
FROM DB_Item
隨着使用實際執行計劃,我看到它與Clustered Index scan
掃描。
那麼,爲什麼它和我們有另一種方法快速獲得Date
的最大值?
非常感謝您的幫助。
謝謝。
是的,這聽起來很合理。我明白爲什麼Query1很慢,但我不明白爲什麼Query2速度很慢。是否因爲聚集索引僅在索引中的所有字段上提供最大值時才起作用? –
@RobertHarvey,聚集索引只會在掃描索引字段(主鍵)時有所幫助。 –
默認掃描策略將使用聚簇索引進行掃描。但是,這並不意味着提供了索引功能。確保你有一個索引,聚簇或非聚簇,這是在你請求的最大值(這被稱爲覆蓋索引)在同一列上 –