記錄一下。
援引自 https://segmentfault.com/q/1010000009440247
背景:
在項目中一個很大的庫進行條件過濾分頁查詢時,發現查詢時間非常久。排查sql執行計划,發現根本沒使用索引。
原因及解決辦法:
在SELECT
中查詢了索引建以外的列,那么ORDER BY
就不會使用索引了。你可以用FORCE INDEX
來強制使用索引。
還有一點,就是所謂的覆蓋索引。覆蓋索引的定義是:MySQL可以根據索引返回select
字段而不用根據索引再次查詢文件而得出結果。
當你使用select *
時,你沒有強制指定索引,那么mysql
為了得到你的查詢的字段而查詢文件,然后再進行排序操作,這就沒有用到覆蓋索引。而你使用了force index
就會強制使用覆蓋索引,這樣就不會出現filesort
的情況了。