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个,但是文件排序不见了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值