以下兩個查詢中,哪一個更快?該表包含超過100M條記錄。所以我只想知道在where子句中使用ISNULL是否與首先爲變量賦值並僅在where子句中使用變量相同?日期範圍查詢方法的性能比較
declare @dt datetime
select COUNT(*) from pandl
where PaymentDate >= ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select @dt = ISNULL(@dt, convert(nvarchar(10),getdate(), 121))
select COUNT(*) from pandl
where PaymentDate >= @dt
你是否運行它們以查看哪個更快?您是否使用過SQL Profiler來查看每個查詢的執行計劃? – Pondlife 2012-02-17 13:54:28
你想使用多少個不同的「現在」值?第二個查詢捕獲當前的日期/時間,如果需要的話,然後搜索。 – HABO 2012-02-17 14:04:31
@ user92546這是一個很好的觀點,但僅僅爲了添加一些信息,即使'getdate()'在第一個查詢過程中被多次評估(我將不得不運行一些測試來驗證),因爲轉換將它舍入了它直到今天,如果查詢在午夜之前開始並且仍然在處理(並且在午夜之後將新值賦給'getdate()'),那才真正重要。我完全同意你的看法,一次分配更好,只是想澄清什麼時候它可能非常糟糕,而不是「最好」。 – 2012-02-17 14:18:26