Mysql的回表查询?如何避免?





聚集索引和非聚集索引

使用索引查询的不同情况(1. 聚合索引、2. 非聚合索引(2.1 非主键索引、2.2 除了非主键索引还包含非索引字段))

  • 通过主键查询 : 当我们查询条件是通过主键查询的时候,因为主键是聚集索引,这时直接就在索引的叶子节点就可以拿到数据;
  • 通过普通索引查询的时候,这里得分两种情况 :
  1. select * from table where 中 xx =‘’ 的字段刚好是索引字段的话,那么直接就可以在索引中找到对应的值,不需要"回表查询",直接返回结果。
  2. select * from table where xx = ‘’ 中xx字段包含除了普通索引以外的字段的话,那么就会通过该记录拿到叶子节点的主键信息,拿到主键信息后再去聚合索引中找到主键对应的行信息,这个过程就叫做回表查询。

什么是回表查询?

使用普通索引的情况下,并且包含了非索引字段的时候,会通过该普通索引获取到叶子节点的主键信息,拿到主键信息后再去聚合索引中找到对应的行信息,这个过程就叫做回表查询。

在这里插入图片描述

回表查询实战

在这里插入图片描述

  1. explain select name from test; 这里看到这里只是单纯的使用了index。
    在这里插入图片描述
  2. explain select name from test where name='name1'; 显示了执行顺序 显示通过where条件然后再使用index。
  3. explain select * from test where name='name1';当执行这两条时也可以看出,下面的语句会因为无法全部通过索引查到,所以会进行回表查询操作。获取数据。






如有错误欢迎指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值