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

回表查询

名词解释

上篇讲到,MySQL中分为聚集索引和非聚集索引。非聚集索引的btree叶子节点中存储的是当行数据的PK。所以为了取到具体数据,则需要通过PK回到聚集索引里去查询数据。着就叫回表查询。扫描了2次索引树。所以效率相对较低。

有图有真相

假设有个T表,如下图所示。id是聚集索引,name则是普通索引。

id name sex
1 小毛
2 小高
3 大雄
4 A梦

表中有4条数据


Id列的B+树索引图(聚集索引)

Name列的B+树索引图(非聚集索引)

执行的查询SQL

select name, sex from t where name = 'A梦';

其执行过程是这样的

粉红色的路径需要扫描两遍索引树,第一遍先通过非聚集索引定位到主键值id=4,然后第二遍再通过聚集索引定位到具体行记录。这就是所谓的回表查询,即先定位主键值,再根据主键值定位行记录,性能相对于只扫描一遍聚集索引树的性能要低一些。

索引覆盖

什么是索引覆盖?

索引覆盖就是为了避免回表查询的一种解决方案。见名知意,就是查询的所有列均被所使用的索引的列给到覆盖(可以是单列索引也可以是联合索引)。因为索引中已经包含了要查询的字段的值,因此查询的时候直接返回索引中的字段值就可以了,不需要再到表中查询,避免了对主键索引的二次查询,也就提高了查询的效率。

举例

还是以上面那张表与SQL为例子,Id是聚集索引,name是非聚集索引。
如果我们想要避免回表查询有两种方案。

注意事项

-不是所有类型的索引都可以成为覆盖索引的。因为覆盖索引必须要存储索引的列值,而哈希索引、空间索引和全文索引等都不存储索引列值,索引MySQL只能使用B-Tree索引做覆盖索引。

索引覆盖的优点

MySQL的回表查询与索引覆盖查询相关推荐

  1. MySQL-回表查询与索引覆盖

    转自:https://www.cnblogs.com/yanggb/p/11252966.html mysql中的回表查询与索引覆盖 了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询 ...

  2. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  3. 【MySQL】回表与覆盖索引

    目录 索引分类 聚簇索引 回表 覆盖索引(Cover Index) 索引分类 索引可以按照以下几个角度进行分类: 从数据结构的角度分类 B+tree 索引 Hash 索引 Full-texts索引 从 ...

  4. 关于mysql数据库回表的粗浅理解

    1关于mysql数据库回表 说一下现象 比如有有一张test表,设置id为主键,name为索引 当使用 select id,name,age from test where id=1 查询数据的时候, ...

  5. mysql回表什么意思_什么是Mysql的回表查询?聊一聊

    要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Secondary Index). InnoDB的聚集索引 ...

  6. 生动的解释下什么是 MySQL 的“回表”?

    1. 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构.这个其实很多小伙伴可能也都听说过,B+Tree 嘛! B+Tree 是什么?那你得先明白什么是 B-Tree,来看 ...

  7. 什么是MySQL的回表?

    文章目录 引言 聚簇索引和非聚簇索引是什么? 主键索引和非主键索引有什么区别? B-Tree 和 B+Tree 的简单理解 如何避免回表? 引言 简单来说,回表就是 MySQL 要先查询到主键索引,然 ...

  8. MySQL数据库——回表

    什么是回表 可以举一个简单的例子,我有一张用于用户登录的user表: 字段名 类型 说明 id bigint(20) 主键ID username varchar(20) 用户名 password va ...

  9. mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  10. 【MySQL】单表访问之索引合并

    MySQL在一般情况下执行一个查询时最多只会用到单个二级索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二级索引,MySQL中这种使用到多个索引来完成一次查询的执行方法称之为:索引 ...

最新文章

  1. 【 C 】关于学习 realloc 踩过的那些坑
  2. Hasor:生命周期
  3. MSSql2005: Cube 和 RollUp 的区别
  4. [MySQL FAQ]系列 -- mysqldump出错一例:打开文件数太多
  5. boost::hana::metafunction_class用法的测试程序
  6. 《java基础知识》Java变量作用域
  7. HDUOJ-----1556Color the ball
  8. 回首十年——写给还在各等级教育中盲目学习的人
  9. matlab中函数imhist的用法
  10. EDIUS 9 PRO(视频编辑软件)
  11. WebService调用第三方服务(中英文翻译)
  12. C语言-函数(一):函数的定义和调用
  13. 阿里巴巴国际站全屏代码装修贸店铺装修平台国际站平台全屏代码装修方法教程视频教程
  14. postgresql源码学习(38)—— 备份还原② - do_pg_stop_backup函数
  15. 唐迟长难句逻辑思维导图(含英语高分笔记)
  16. webGIS学习(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理 发布于 3 年前 作者 lzxue 7473 次浏览 来自 技术 1.没有豆浆机怎么办? 喝豆浆是我们早晨中基本
  17. DDOS防护如何建设?
  18. mybatis 多条件查询、in查询
  19. 中国银联基于软件定义网络的下一代金融云研究探索
  20. 76、基于STM32的电动车小车蓄电池/锂电池充电桩系统设计

热门文章

  1. OpenCV :(-5:Bad argument) Matrix operand is an empty matrix. in function ‘checkOperandsExist‘
  2. 解析极限编程--Kent Beck, Cynthia Andres读后感
  3. oracle shared_pool_size 0,Oracle 参数shared_pool_size
  4. freemaker if 多个条件_小函数,大用处!巧用AND函数,避开IF函数嵌套
  5. 多元梯度下降法(2)--学习率α machine learning
  6. 中文分词与马尔科夫模型之二(隐马尔科夫模型与维特比)
  7. 最近写mapreduce程序从hbase中抽取程序遇到的一些问题
  8. 【UVALive - 6922】Reverse Polish Notation【贪心】
  9. POJ1015 Jury Compromise【背包问题】
  10. C#WPF多线程控件访问问题