這裏是我的查詢指數+ SQL Server 2005中
Declare @StartDateTime datetime, @EndDateTime datetime
Select @StartDateTime = '2010-11-15', @EndDateTime = '2010-11-16'
Select PracticeCode, AccountNo, ProcCd, Modifier , ChargeDos, Paid as Amt, CreatedDate,
case When Paid > 0 then 'P'
When Paid = 0 and WrittenOff = DueAmt then 'A'
Else 'O'
End as Status
From Trn_Postings
Where CreatedDate >= @StartDateTime and CreatedDate <= @EndDateTime
--and ManualOverride in ('S','F','X','G','O')
and ManualOverride in ('N','U')
編輯:創建日期是包含&時間記錄的創建
日期我有單獨的索引日期時間列在CreatedDate和ManualOverride上。但執行計劃顯示聚簇索引掃描。該表有近百萬條記錄,並且在不久的將來可以增長4到5倍。
最令人驚訝的部分是,如果我更改下面的where子句,它使用這兩個索引。我只是不知道爲什麼。
Where CreatedDate >= @StartDateTime and CreatedDate <= @EndDateTime
and ManualOverride in ('S','F','X','G','O')
--and ManualOverride in ('N','U')
如何使SQL中使用索引...
而且如果我使用一個不在條款不會被使用的索引。
因爲它的立場,優化*不考慮*索引。它*可能是錯誤的*在不使用索引爲您的第一個案件,但很可能,它不是。你能爲這兩種情況發佈計劃嗎? – 2010-11-16 07:49:43
使用索引並不總能讓您獲得更好的性能。一個簡單的情況是,強制編譯器使用索引的速度會比較慢,通過執行返回** all **行的select。 – 2010-11-16 07:54:19
'通過ManualOverride'從Trn_Postings組中選擇ManualOverride,COUNT(*)。如果N和U代表此列中的大部分值,則表示索引對查詢不會有用,所以優化器不太可能使用它。 – 2010-11-16 08:02:27