mysql索引排序

在建立索引时有时要考虑的排序字段,将排序字段加入索引也可以缩小搜索范围

explain select * from table_name where skin_id=4 order menu_order desc


上图可见,对应没有索引的sql,按menu_order 倒序,使用到了filesort。filesort非常影响效率,在数据量不大的情况下会使用内存排序,将查询结果导入内存,排序后再返回。在数据量大于限定内存时,会将查询结果保存到文件,然后经过排序再读取文件返回,造成大量I/O


先给条件字段skin_id加索引

ALTER TABLE table_name ADD INDEX ( `skin_id` )



上图可见:添加skin_id索引后,搜索范围缩小到4条


给条件和排序增加联合索引

ALTER TABLE table_name DROP INDEX `skin_id` ,ADD INDEX `skin_id` ( `skin_id` , `menu_order` )




上图可见:增加给排序字段增加索引后,搜索基数虽然增加1个,但是文件排序不见了

你可能感兴趣的:(mysql)