关于mysql优化的问题

修改问题: 下面出现的问题貌似是我本地环境的问题, 换了个环境就可以了, 现在我想问问我的环境为什么会出现下面的情况 :(

最近学习数据库优化, 遇到不少不解的地方:

  1. mysql查询数据时filesort什么情况下出现,
    我创建如下表,

create table test (
    id int auto_increment primary key,
    name varchar(20),
    age tinyint
)

添加测试数据

insert into test (name, age) values 
('zhang', 8),
('wang', 18),
('li', 2),
('zhang', 12),
('zhao', 23),
('zhang', 7),
('li', 12),
('wang', 4)

然后执行

explain select * from test order by id

clipboard.png

这里的using filesort为什么会出现, 我看资料上有说当排序的字段不能使用索引时就会使用filesort, 但id不该是索引吗
https://www.percona.com/blog/...

阅读 3.4k
4 个回答

不用太在意这个问题
1.背景知识:
mysql在执行sql语句的时候,会对你的语句进行优化,优化的时候会去读取很多信息,包括表信息以及宿主机器信息,综合考虑后,它发现你这条语句即使可以使用索引,但是实际上不使用索引更快的时候,就会自动不使用索引进行查询。
2.你的执行计划:
type里是all说明他走了全表,即没有走索引,然后order by需要配需,所以就在内存里自己进行了一次排序,extra为file sort

在本地无法复现,我怀疑你给出的表结构和实际执行explain的不一样,有隐式类型转换

我对这个问题也很困惑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题