文章詳情頁
mysql order by為什么沒有走索引排序?
瀏覽:205日期:2022-06-13 13:04:11
問題描述

order by city_id (主鍵走索引)
order by country_id(不走索引!!!)
問題解答
回答1:你的city_id是主鍵,而country_id是復合主鍵。
回答2:改成
SELECT * FROM city FORCE INDEX(idx_fk_country_id) ORDER BY country_id;
是這樣的,你在SELECT中查詢了索引建以外的列,那么ORDER BY就不會使用索引了。你可以用FORCE INDEX來強制使用索引。
還有一點,就是所謂的覆蓋索引。覆蓋索引的定義是:MySQL可以根據索引返回select字段而不用根據索引再次查詢文件而得出結果。
當你使用select *時,你沒有強制指定索引,那么mysql為了得到你的查詢的字段而查詢文件,然后再進行排序操作,這就沒有用到覆蓋索引。而你使用了force index就會強制使用覆蓋索引,這樣就不會出現filesort的情況了。
回答3:
相關文章:
1. 前端 - 集思廣益,如何用CSS實現數字上面有一個點2. css3 讓圖片變成灰色(filter),但針對IE11瀏覽器無效3. html5 - 前端面試碰到了一個緩存數據的問題,來論壇上請教一下4. macos - 無法source activate python275. 我在導入模板資源時遇到無法顯示的問題,請老師解答下6. css - 移動端 盒子內加overflow-y:scroll后 字體會變大7. PHPExcel表格導入數據庫怎么導入8. java - butterknife怎么綁定多個view9. 運行python程序時出現“應用程序發生異常”的內存錯誤?10. java - 同步/異步與阻塞/非阻塞之間的差異具體是什么?
排行榜

網公網安備