您的位置:首頁技術文章
文章詳情頁

mysql order by為什么沒有走索引排序?

瀏覽:132日期:2022-06-13 13:04:11

問題描述

mysql order by為什么沒有走索引排序?

mysql order by為什么沒有走索引排序?

order by city_id (主鍵走索引)mysql order by為什么沒有走索引排序?

order by country_id(不走索引?。?!)mysql order by為什么沒有走索引排序?

問題解答

回答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:

mysql order by為什么沒有走索引排序?

相關文章:
国产综合久久一区二区三区