我有一個SQL查詢,其執行計劃取決於我提供的DateTime參數。我明白,如果我有這樣一個條件:SQL Server 2008:執行計劃取決於日期參數
WHERE Date > '2012-02-28' AND Date < '2012-01-01'
則執行計劃將只是一個恆定的評價,因爲沒有結果返回。但在其他情況下,我會得到不同的執行計劃,這對我來說沒有任何意義。例如有條件:
WHERE Date >= '2012-02-01 00:00:00' AND Date <= '2012-02-02 22:00:00'
該查詢使用我添加並優化的索引。但如果我將條件更改爲:
WHERE Date >= '2012-02-27 00:00:00' AND Date <= '2012-02-27 22:00:00'
它不再使用索引。
在運行查詢之前,我重建了此表上的所有索引。我在這找不到任何邏輯。所以我的問題是:DateTime參數如何影響爲查詢選擇哪個執行計劃?
編輯:顯然,原因是我有一個額外的索引在日期只困惑的SQL Server。刪除索引後,所有內容都按預期工作。但是,謝謝你的想法。我沒有提供足夠的細節讓你弄清楚。索引太多從來都不好!
感謝您的想法(我甚至不知道過濾索引存在)。該索引未被過濾,表未分區。查詢計劃似乎取決於統計數據。 – 2012-02-28 14:12:24