mysql order by为什么没有走索引排序?

order by city_id (主键走索引)

order by country_id(不走索引!!!)

你的city_id是主键,而country_id是复合主键。

改成

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的情况了。

  • php+mysql有没有办法实现简单的查询
  • 数据库主从模式,怎么读从数据库数据?(请附上代码)
  • 对于两个表,一般是直接关联还是分两次查出来再关联
  • yii2 mysql如何跨数据库联表查询?
  • 想要系统的学习数据库设计,推荐些数据库相关书籍呗
  • 2003 can’t connect to mysql server on 10060
  • python 不存在就创建 存在就更新
  • 队列异步执行的时候是无法使用SESSION的,那么登录还能使用队列吗?
  • 如何才能称得上熟悉mysql
  • wamp下通过mysqldump导出数据库存放位置在哪里?
  • Cassandra 建表是否可以添加字段注释?