联合索引提高查询效率的原理

MySQL会为InnoDB的每个表建立聚簇索引,如果表有索引会建立二级索引。聚簇索引以主键建立索引,如果没有主键以表中的唯一键建立,唯一键也没会以隐式的创建一个自增的列来建立。聚簇索引和二级索引都是一个b+树,b+树的特点是数据按一定顺序存在叶子节点且每页数据相连。一般情况下使用索引查询时,先查询二级索引的b+树,查到数据并拿数据中保存的主键回查聚簇索引查到所有数据。下面我们举个例子来重现这个过程。

以下面表举例,假设表中已经存了部分数据:

create table `user_info`(`id` bigint(20) NOT NULL  PRIMARY KEY,`name` varchar(11),`age` int(11),`phone` varchar(20),KEY `key_name_age` (`name`,`age`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


假如我们想要查找名字为zhaoliu,年龄为30的人的信息。即name=‘zhaoliu’,age=30

(1)先查二级索引,先用二分法查找发现在wangwu名字的右边
(2)读取右边的这页的数据到内存,二分法查到数据2个name为zhaoliu人。
(3)继续二分法比较age查到数据id=31
(4)id=31回查聚簇索引先用二分法查找发现在31右边
(5)读取31左边这页数据到内存,二分法查到数据并返回数据
如果你仅仅查找id,name和age数据那么这样就用到了覆盖索引,这样就不用回查聚簇索引,在第(3)步直接返回数据即可。

MySQL-InnoDB索引实现相关推荐

  1. 【mysql innodb索引结构B+树】

    [mysql innodb索引结构B+树] 为什么Mysql中Innodb的索引结构采取B+树? B树 B树的两个明显特点 树内的每个节点都存储数据 叶子节点之间无指针相邻 B+树 B+树的两个明显特 ...

  2. mysql innodb 索引结构_Mysql 学习笔记:InnoDB 索引结构浅析

    索引是检索图书资料的一种工具,把书刊中的内容或项目分类摘录,注明页数,按一定次序排列. 针对不同的数据存储结构有不同的数据查找方式. 1. 数据结构 1.1 B树 B树又名平衡多路查找树,主要用于文件 ...

  3. Mysql InnoDB索引分析

    索引介绍 在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样.而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同.InnoDB ...

  4. MySQL InnoDB索引介绍及优化

    转载自 https://segmentfault.com/a/1190000007445807 一.索引概念 索引(index)翻译为一个目录,用于快速定位我们想要找的数据的位置.例如:我们把一个数据 ...

  5. mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联

    延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不就不 ...

  6. mysql innodb索引原理

    聚集索引(clustered index) innodb存储引擎表是索引组织表,表中数据按照主键顺序存放.其聚集索引就是按照每张表的主键顺序构造一颗B+树,其叶子结点中存放的就是整张表的行记录数据,这 ...

  7. 轻松理解 MySQL InnoDB 索引、B+树索引、查询原理

    博主:爱码叔 个人博客站点: icodebook 公众号:爱码叔漫画软件设计(搜:爱码叔) 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间 ...

  8. mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表

    什么是回表查询? InnoDB使用聚集索引,数据根据主索引存储在叶子节点上,辅助索引的data域存储主键. myisam使用非聚集索引,即主索引(B+树)的叶子节点存储数据的地址(需要回表),myis ...

  9. mysql innodb 索引组织表_Mysql InnoDB引擎 -索引组织表

    在InnoDB 存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的额表称为索引组织表.在InnoDB存储引擎表中,每张表都有个主键(Primary key),如果在创建表时 没有显示地定义主键, ...

  10. mysql联合索引abc

    mysql 联合索引 复合索引 (abc) 命中率:在工作中经常会使用到联合索引,在百度查询多很多资料也有说法不一的.给大家实测下100w数据下查询命中率,废话不多说.上干货: 创建测试表: SET ...

最新文章

  1. Visual Studio 中Debug模式和Release模式的区别
  2. SpringBoot中提示:Consider marking one of the beans as @Primary, updating the consumer to accept multipl
  3. oracle sql developer 查看游标结果集(3.0.04
  4. 阅读器关闭时尝试调用Read无效时的解决方法
  5. matlab2015统计工具箱,matlab统计工具箱函数汇集
  6. 如何 珍惜自己和珍重别人。珍惜一切
  7. js 表格动态增加行通用函数
  8. vue mqtt测试工具使用(一)
  9. 如何DIY一台属于你自己的电脑?
  10. pytorch读取数据集(分类文件夹加载)—ImageFolder()
  11. nurbs曲线拟合程序_一种基于NURBS的空间自由曲线拟合方法与流程
  12. Apache解析漏洞
  13. 南锣鼓巷大变样,最新逛吃全攻略收好!
  14. android 百度地图自定义定位小箭头图标,并随着手机方向转动
  15. C++ 惯用法之 Nifty Counter
  16. 决策树(三)--完整总结(ID3,C4.5,CART,剪枝,替代)
  17. 英特尔、高通等多家科技巨头禁止员工与华为交流!
  18. mysql行转列简单例子_mysql行转列、列转行示例
  19. 硬盘分区 硬盘分区 硬盘分区
  20. SAP ABAP MD61 / MD62 / MD63 BAPI 函数组 3027

热门文章

  1. C++中引用与指针的区别(详细介绍)
  2. 【Linux网络编程学习】预备知识(网络字节序、IP地址转换函数、sockaddr数据结构)
  3. 1148 Werewolf - Simple Version (20 分)
  4. 孤儿进程、僵尸进进程
  5. makefile的两个变量(自动变量和普通变量)
  6. javascript如何阻止事件冒泡和默认行为
  7. eclipse报Access restriction: The type 'BASE64Decoder' is not API处理方法
  8. select的一些问题。
  9. JavaWeb项目前端规范(采用命名空间使js深度解耦合)
  10. Quartz.net 2.0的使用说明