美文网首页
MySQL回表

MySQL回表

作者: AC编程 | 来源:发表于2022-03-03 18:35 被阅读0次

一、两类索引

大家知道,MySQL 中的索引有很多种不同的分类方式,可以按照数据结构分,可以按照逻辑角度分,也可以按照物理存储分,其中,按照物理存储方式,可以分为聚簇索引和非聚簇索引。

我们日常所说的主键索引,其实就是聚簇索引(Clustered Index);主键索引之外,其他的都称之为非主键索引,非主键索引也被称为二级索引(Secondary Index),或者叫作辅助索引。

对于主键索引和非主键索引,使用的数据结构都是 B+Tree,唯一的区别在于叶子结点中存储的内容不同:

  • 主键索引的叶子结点存储的是一行完整的数据。
  • 非主键索引的叶子结点存储的则是主键值。

这就是两者最大的区别。

所以,当我们需要查询的时候:

1、如果是通过主键索引来查询数据,例如 select * from user where id=100,那么此时只需要搜索主键索引的 B+Tree 就可以找到数据。

2、如果是通过非主键索引来查询数据,例如select * from user where username='javaboy',那么此时需要先搜索 username 这一列索引的 B+Tree,搜索完成后得到主键的值,然后再去搜索主键索引的 B+Tree,就可以获取到一行完整的数据。

对于第二种查询方式而言,一共搜索了两棵 B+Tree,第一次搜索 B+Tree 拿到主键值后再去搜索主键索引的 B+Tree,这个过程就是所谓的回表。

从上面的分析中我们也能看出,通过非主键索引查询要扫描两棵 B+Tree,而通过主键索引查询只需要扫描一棵 B+Tree,所以如果条件允许,还是建议在查询中优先选择通过主键索引进行搜索。

二、一定会回表吗

那么不用主键索引就一定需要回表吗?答案是不一定。如果查询的列本身就存在于索引中,那么即使使用二级索引,一样也是不需要回表的。

举个例子,有一张user表,uname 和 address 字段组成了一个复合索引,那么此时,虽然这是一个二级索引,但是索引树的叶子节点中除了保存主键值,也保存了 uname 和address 的值。当我们查询explain select uname,address from user where username='javaboy 时,可以看到,此时使用到了 uname 索引,但是最后的 Extra 的值为 Using index,这就表示用到了索引覆盖扫描(覆盖索引),此时直接从索引中过滤不需要的记录并返回命中的结果,这一步是在 MySQL 服务器层完成的,并且不需要回表。

因此SQL优化中有一条优化建议就是避免使用select *,其中有一个原因就是利用覆盖索引。

相关文章

  • MySQL回表

    一、两类索引 大家知道,MySQL 中的索引有很多中不同的分类方式,可以按照数据结构分,可以按照逻辑角度分,也可以...

  • Mysql 相关

    MySQL索引 MySQL索引背后的数据结构及算法原理 覆盖索引和回表操作 MySQL性能优化 MySql表分区详...

  • MySQL中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖。 回表查询 要说回表查询,先要从InnoDB的索引实现说起。InnoDB...

  • 5.数据库索引

    回表:回到主键索引树搜索的过程。 如何优化索引避免回表过程? 1. 覆盖索引: mysql> create tab...

  • Mysql学习——数据库基础操作(1)

    Mysql创建数据库Mysql删除数据库Mysql创建表Mysql删除表Mysql添加表数据Mysql修改表数据M...

  • MySQL表闪回(完结)

    环境描述 此次闪回实验基于binlog2sql,官网:binlog2sql官网 py环境:2.7,3.4+;(亲测...

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • 对于Mysql索引的理解(二)

    对于Mysql的索引有很多比较专业的词汇,这次就来讲讲这些回表查询、索引覆盖、最佳左前缀、索引下推。 1. 回表查...

  • MYSQL 表名称操作

    Mysql 批量删除表名 MYSQL批量修改表前缀与表名sql语句

  • mysql覆盖索引与回表

    select id,name where name='shenjian' select id,name,sex* ...

网友评论

      本文标题:MySQL回表

      本文链接:https://www.haomeiwen.com/subject/qssurrtx.html