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

本文详细介绍了MySQL中的回表查询现象,特别是在使用非聚集索引时,如果查询包含非索引字段,就会发生回表查询。通过实例解释了如何通过优化查询语句来避免回表查询,提高数据库查询效率。同时,讨论了不同索引类型(如聚集索引、非聚集索引)在查询中的应用和影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





聚集索引和非聚集索引

使用索引查询的不同情况(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';当执行这两条时也可以看出,下面的语句会因为无法全部通过索引查到,所以会进行回表查询操作。获取数据。






如有错误欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小小狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值