我有一個MySQL查詢,看起來像下面這樣:爲什麼MySql不使用我的索引以及如何避免「Using temporary; Using filesort」?
SELECT trace_access.Employe_Code, trace_access.Employe_Prenom,
trace_access.Employe_Nom, , trace_access.Evenement_Date, trace_access.Evenement_Heure
FROM trace_access
INNER JOIN emp
ON trace_access.Employe_Code = emp.Employe_CodeEmploye
LEFT JOIN user
ON emp.Employe_ID = user.Employe_ID
LEFT JOIN role
ON role.User_ID = user.User_ID
WHERE trace_access.Employe_Nom Not Like "TEST%NU"
ORDER BY trace_access.Evenement_Date DESC , trace_access.Evenement_Heure DESC
表「trace_access」包含近20萬個條目。
當我解釋查詢:
我的問題是,爲什麼MySQL並沒有使用該密鑰emp表,以及如何避免「使用臨時;使用文件排序」?
我試圖力的確定是使用我的索引,但沒有奏效。 查詢持續一個小時以上,在超過8Go的/ tmp文件夾上寫入一個文件!
任何幫助?
非常感謝。
我懷疑基於不是條件將使用索引,更糟糕的時候是喜歡的。但是這樣一個簡單的選擇不應該只在2000萬行上運行一小時。返回多少行? – dnoeth
奇怪的事情正在發生。請爲表提供'SHOW CREATE TABLE';我懷疑數據類型不一致。 –
查詢中有一個多餘的逗號','。這是你運行的實際查詢嗎? – THN