84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
order by city_id (主键走索引)
order by country_id(不走索引!!!)
认证0级讲师
你的city_id是主键,而country_id是复合主键。
改成
SELECT * FROM city FORCE INDEX(idx_fk_country_id) ORDER BY country_id;
是这样的,你在SELECT中查询了索引建以外的列,那么ORDER BY就不会使用索引了。你可以用FORCE INDEX来强制使用索引。
SELECT
ORDER BY
FORCE INDEX
还有一点,就是所谓的覆盖索引。覆盖索引的定义是:MySQL可以根据索引返回select字段而不用根据索引再次查询文件而得出结果。
select
当你使用select *时,你没有强制指定索引,那么mysql为了得到你的查询的字段而查询文件,然后再进行排序操作,这就没有用到覆盖索引。而你使用了force index就会强制使用覆盖索引,这样就不会出现filesort的情况了。
select *
mysql
force index
filesort
你的city_id是主键,而country_id是复合主键。
改成
是这样的,你在
SELECT
中查询了索引建以外的列,那么ORDER BY
就不会使用索引了。你可以用FORCE INDEX
来强制使用索引。还有一点,就是所谓的覆盖索引。覆盖索引的定义是:MySQL可以根据索引返回
select
字段而不用根据索引再次查询文件而得出结果。当你使用
select *
时,你没有强制指定索引,那么mysql
为了得到你的查询的字段而查询文件,然后再进行排序操作,这就没有用到覆盖索引。而你使用了force index
就会强制使用覆盖索引,这样就不会出现filesort
的情况了。