修改问题: 下面出现的问题貌似是我本地环境的问题, 换了个环境就可以了, 现在我想问问我的环境为什么会出现下面的情况 :(
最近学习数据库优化, 遇到不少不解的地方:
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
这里的using filesort为什么会出现, 我看资料上有说当排序的字段不能使用索引时就会使用filesort, 但id不该是索引吗
https://www.percona.com/blog/...
不用太在意这个问题
1.背景知识:
mysql在执行sql语句的时候,会对你的语句进行优化,优化的时候会去读取很多信息,包括表信息以及宿主机器信息,综合考虑后,它发现你这条语句即使可以使用索引,但是实际上不使用索引更快的时候,就会自动不使用索引进行查询。
2.你的执行计划:
type里是all说明他走了全表,即没有走索引,然后order by需要配需,所以就在内存里自己进行了一次排序,extra为file sort