mysql如何优化使用索引

在mysql的innodb中数据是存在主键索引上的,通过普通索引查询出来的是主键值,之后会再跳到主键索引上去获取数据,这个过程叫回表。

例如表中为name和age创建了联合索引,查询sql为:

select * from table where name like '张%' and age=8

1、在mysql5.5版本中会根据联合索引的最左匹配原则,查询所有首字母为张的人,然后向右一个一个去回表查询age=8的人。假如姓张的有8000W个,最终满足条件的有100W人,那么就会根据索引查询8000W次,回表8000W次,最终输出100W行记录
2、在mysql5.6中,对索引查询进行了优化,会直接在联合索引中去查询age=8的主键id,这样就会根据索引查询8000W次,回表100W次,最终输出100W行记录
3、在mysql5.7中,新增了一种虚拟列,例如这个例子中可以将name的首字提出来新建一个虚拟列,然后将虚拟列和age进行联合索引,这个时候查询语句就变成了:

select * from table where 虚拟列 = '张' and age=8

索引查询就变成了100W次,回表100W次,最终输出100W行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值