我有一個查詢,如下所示:SQL「或」 where子句中造成使用上沒有索引
SELECT COUNT(Table1.Identifier) AS NonCancelCnt
FROM Table1, Table2
LEFT JOIN eventattendees ON eventattendees.AttendeeID = 47322
LEFT JOIN eventsignup ON eventattendees.AttendeeID = eventsignup.AttendeeID
LEFT JOIN transactions on transactions.registrationID=eventsignup.regid
WHERE ((eventsignup.EventID = Table1.Identifier) Or (eventsignup.EventID = Table1.AttendanceLinkID))
的「OR」子句導致沒有索引使用。如果我刪除任何一部分,我的執行路徑從95,000到200,並且速度急劇增加。
我在修復這樣的事情方面經驗不是很豐富,我的最佳選擇是什麼?
您可以將其中一個OR條件移動到「第二個」查詢,然後將它們與UNION連接起來......優化程序首先無法解決這個問題通常是不尋常的。 – Randy
可能值得一試..也許統計數據已過時,並且規劃人員認爲大部分行都是x或y,所以不打擾索引?我漫步,如果一個'EventID IN(...)'會更好嗎? –
除了答案之外,Table1和Table2的上下文是什麼,它們的關係是什麼,你試圖從這個查詢中得到什麼......你的整體COUNT()只是給出一個沒有任何上下文的數字,或者與會者。 – DRapp