2
我有以下形式的查詢:爲什麼日期類型會極大地影響查詢執行的性能?
DECLARE @date DATETIME = <some_date>
SELECT ....
FROM a
WHERE <some_conditions> AND a.LastEvent < @date
LastEvent列是DATE
類型。
查詢工作得很快。但是,如果我將@date類型更改爲DATE
查詢執行似乎不會完成。如果我註釋掉條件
AND a.LastEvent < @date
查詢工作再次快速。
我很驚訝參數的輕微改變會影響性能,但我不知道爲什麼會發生這種情況。
比較執行計劃。 –
我讀了一些說日期只是截斷時間或零時間的日期時間。不妨使用datetime作爲列類型。我認爲編譯器用「日期」做了一些有趣的事情,而日期時間非常簡單。 – Rich
你是否在每次執行之前清除緩衝區和緩存以確保它不再使用先前存儲的執行計劃?你在桌上有什麼索引?你能發佈索引中的索引類型和列順序嗎?您還需要發佈什麼是「」當數據類型與WHER條件的右側不匹配時,隱式數據類型轉換髮生在左側。在第二次運行中,您說您正在將@date數據類型設置爲DATE,並且它與a.LastEvent的數據類型相同。 –