覆盖索引概念:

MySQL可以利用索引返回SELECT 列表中的字段。而不必根据索引再次读取数据文件。包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index)。也就是平时所说的不需要回表操作。
判断标准:
在查询前面使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询。
注意:覆盖索引也并不适用于任意的索引类型,索引必须存储列的值。Hash 和full-text索引不存储值,因此MySQL只能使用B-TREE。并且不同的存储引擎实现覆盖索引都是不同的。并不是所有的存储引擎都支持它们。如果要使用覆盖索引。一定要注意SELECT 列表值取出需要的列。不可以是SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大。查询性能下降。不能为了利用覆盖索引而这么做。
InnoDB中,覆盖索引查询时除了除了索引本身的包含的列,还可以使用其默认的聚集索引列 。
Innodb的索引是B+Tree数据结构,这个跟MyISAM也是一样的,不同的是Innodb的Primary Index叶子节点直接存储了Row记录数据,而Secondary Index存储了PK值。而MyISAM索引的叶子节点存储的是记录的ID,即RowID。
下图是Innodb的索引示意图:


 

1)如果一个索引值跟Key值不是一一对应的关系,那么叶子节点存储的可能是一个映射地址,指向一个对应了多个Pk值的映射表;

有些数据库是如此操作的,具体Innodb是否如此,我还不太确认;
2)对于组合主键,其实就是把多个字段值组合起来作为Primary Key,结构跟Primary Key Index是一样的;
3)由于所有非Primary key index都引用了Primary Key所以对Primary Key的变更会导致所以索引都要重建;
4)Innodb默认的pagesize是16K,通过编译源码可以指定为64K,pagesize就是B+Tree上一个节点的容量,pagesize越大key值越小,单个结点能存储的entry就越多。当索引树每分裂出多一层,索引的Size也会随之发生跳跃性的变化。

参考资料:

innodb-file-formats-and-source-code-structure
简朝阳:MyISAM 索引结构了解 Innodb 索引结构了解
InnoDB索引初探

如果你对数据库设计的细节非常的感兴趣,我强力建议你可以认真看看这本书《Fundamentals of Database Systems》,
中文译名是《数据库系统基础》,中国电力出版社有出。现在好像已经是第五版了。

mysql覆盖索引理解相关推荐

  1. MySQL覆盖索引(Covering Index)

    MySQL覆盖索引(Covering Index) mysql高效索引之覆盖索引 概念 如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表 ...

  2. MySQL 覆盖索引

    本文主要概述mysql的覆盖索引,以及几种常见的优化场景 内容概要 聚集索引和辅助索引 什么是覆盖索引 几种优化场景 总体建议 聚集索引和辅助索引 聚集索引(主键索引) -innodb存储引擎是索引组 ...

  3. MySQL 覆盖索引、最左前缀原则、索引下推

    1.覆盖索引 1.1 概念 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了.如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引 ...

  4. mysql覆盖索引二次查找_mysql中关于覆盖索引的知识点总结

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为'覆盖索引'. 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1.索引项通常比记录要小,所以My ...

  5. 简单易懂的MySQL覆盖索引、前缀索引、索引下推

    文章目录 前言 常见的索引类型 聚簇索引/非聚簇索引 覆盖索引 前缀索引 索引下推 前言 索引的出现是为了提高数据查询效率,像书的目录一样.对于数据库的表而言,索引其实就是"目录" ...

  6. MySQL 覆盖索引(Cover Index)

    概述 一个索引包含了所有需要查询的字段值,那么就称为覆盖索引. 好处 索引的大小通常远小于数据行大小,所以如果只需要读取索引,那么MySQL会极大的减少数据访问量. 索引是按照值得顺序存储的. Inn ...

  7. mysql覆盖索引详解

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为'覆盖索引'.即只需扫描索引而无须回表. 只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少 ...

  8. mysql覆盖索引解决模糊查询失效_关于MySQL的SQL优化之覆盖索引

    前些天,有个同事跟我说:"我写了个SQL,SQL很简单,但是查询速度很慢,并且针对查询条件创建了索引,然而索引却不起作用,你帮我看看有没有办法优化?". 我对他提供的case进行了 ...

  9. Mysql 覆盖索引及其使用注意事项

    一,什么叫覆盖索引 网上对覆盖索引的定义有如下三种: 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖. 解释二: 索引是高效找到行的一 ...

  10. MySQL覆盖索引:直接从索引查询到了数据

    标志:覆盖索引的标志  extra的using index ; 定义:sql直接从索引查找到了数据  没有去数据表查找  就是索引覆盖了 就是覆盖索引 结合:有using where和using id ...

最新文章

  1. 05-连接数据库方法
  2. CSS 基础:文本和字体(4)思维导图
  3. 【主席树】可持久化数组(金牌导航 可持久化数据结构-3)
  4. MYSQL数据库实验三多表查询_数据库之 MySQL --- 数据处理 之多表查询 (三)
  5. java socket 异步回调函数,分享nodejs异步编程基础之回调函数用法
  6. diy配置程序php,poscmsDiy字段之文件类型设计指南
  7. [Delphi]ListView基本用法大全
  8. redirect_uri 域名与后配置不一致是什么意思_网站域名怎么购买?多少钱?
  9. 项目需求讨论--可能是用InputFilter来做的最好的金额限制
  10. 前端实现video播放
  11. Xcode9之折叠代码
  12. vac虚拟声卡我linux,虚拟声卡驱动应用及其原理简要说明
  13. flask +layUI+ ajax 上传图片
  14. MySQL 查询语句返回某字段出现超过1次的所有记录
  15. 图片的描述生成任务、使用迁移学习实现图片的描述生成过程、CNN编码器+RNN解码器(GRU)的模型架构、BahdanauAttention注意力机制、解码器端的Attention注意力机制
  16. Matlab从细胞型转换为矩阵From cell to matrix
  17. TopCoder入门教程(转载)
  18. python三维曲面拟合_用Python拟合多项式曲面
  19. mysql严谨模式_mysql不严谨模式怎么开启?
  20. 汽车变速箱的科学保养方法

热门文章

  1. SVM-支持向量机算法概述
  2. C语言圆周率(公式法)
  3. 计算机系统常见的10个硬件 1故障,计算机十项常见故障
  4. Altium Designer库文件与Protel 99SE库文件转化
  5. 数字逻辑练习题(七) 用74LS138译码器和门电路实现逻辑函数
  6. 认知盈余时代-知乎如何运营
  7. 新形势下电力监控系统网络安全风险分析与防护对策
  8. 什么是计算机图形学?
  9. 【UV打印机】PrintExp打印软件教程(七)-高级模式(其它)
  10. Python 资源索引[绝对适合PYTHON人]