我有一個約100萬行SQL Server上的表。 它有一個ID(PK),一個狀態(int)和一個日期時間列。 另外我在datetime列上創建了一個索引。爲什麼SQL Server不使用非常類似的日期時間查詢索引?
現在我發現了一個效果,我不明白。
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T12:00:00'
該語句返回3664行。它運行大約150ms,並且執行計劃顯示它通過密鑰查找執行索引查找。
現在,如果我改變如下(只是更改小時12〜13):
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T13:00:00'
此語句返回3667行。它運行大約600毫秒,並且生成計劃顯示它使用主鍵!
我只是不明白它。對於3667和更多的行,它始終使用主鍵,即使搜索速度更快。
有沒有解釋?
嘗試在日期時間字段中的索引中包含「status」列 - 我幾乎保證這樣做,查詢優化器將使用該索引,並且比執行聚簇索引掃描時快得多...... –