关于mysql索引的疑问

创建如下表

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 group by name order by id

clipboard.png

我要怎么创建索引可以避免using temporary 和 using filesort

阅读 1.7k
2 个回答

你可以再name字段上建立索引

  1. 可以对group by的对象建立索引,比如name;

  2. 这里出现using temporary 和 using filesort的主要原因是order by id引起的,不是通过索引就可以解决的。建议你重新考虑一下使用的场景和这句sql查询的目的,特别是你要在分组后做order by id的目的是什么。

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