我们建立一个表来进行测试,表的DDL如下所示,我们要关注的是表t_book上的主键索引id和name author publish_date三列组成的索引test_index 。
Mysql中的B树索引是使用B+树实现的,关于B+树的数据结构个人认为美团点评技术博客中Mysql索引原理及慢查询优化一文中介绍的非常详实,B+树的数据结构如下图所示 。
图中浅蓝色块即磁盘块,根节点磁盘块中存储17和35两个数据,其中指针P1指向小于17的数据,指针P2指向大于17小于35的数据,指针P3指向大于35的数据 。显然通过B+树索引查询数据与B+树的高度有关,如上图的B+树索引查找一个叶子节点的数据只需要三次磁盘IO,对于Mysql来说三层的B+树可以索引上百万的数据,这对于查询效率的提升是巨大的 。
总结起来Mysql中B树索引有以下关键特点:
Mysql中的B树索引有两种数据存储形式,一种为聚簇索引,一种为二级索引 。
InnoDB一般会使用表的主键来作为聚簇索引,如果一个表没有主键(不建议这么玩)InnoDB会选用一个唯一非空索引来代替,如果没有这样的索引,InnoDB会隐式建立一个聚簇索引 。聚簇的含义即是数据行和相邻的键值紧凑的存储在一起 , 占据一块连续的磁盘空间,因此通过聚簇索引访问数据可以有效减少随机IO,通常使用聚簇索引查找比非聚簇索引查找速度更快 。以我们建立的表t_book为例,聚簇索引即为自增主键id,其B树索引数据结构可以用下图来表示 。
聚簇索引有以下关键特点:
InnoDB的B树索引中除了聚簇索引 , 就都是二级索引了,二级索引的含义是索引的叶子节点除了存储了索引值,还存储了主键id,在使用二级索引进行查询时,查找到二级索引B树上的叶子节点后还需要去聚簇索引上去查询真实数据,但是这里有一种特殊情况,即查询所需的所有字段在二级索引中都可以获?。耸本筒恍枰偃セ乇聿槭萘耍庵智榭鼍褪撬饕哺牵‥XPLAIN中EXTRA列中会出现USING INDEX,本文只关注索引结构,不详细讨论索引覆盖等技术的使用,如果深入理解索引的数据结构,索引覆盖等技术也没有那么神秘) 。
在我们的测试表t_book中 , test_index即为二级索引 , 由于我们把除了主键id所有的列都作为一个联合索引,所以在这个表上的查询都可以使用索引覆盖技术 , 但是具体生产环境中也不建议总是采用这种做法 , 索引列的增加也会增大插入更新数据时的索引更新成本,具体的优化要视具体情况决策 。t_book上的二级索引test_index的索引结构由下图表示 。
通过以上结构,我们可以推断出二级索引的以下关键特点:
索引覆盖:
最左前缀匹配:
二级索引可以说是我们在Mysql中最常用的索引,通过理解二级索引的索引结构可以更容易理解二级索引的特性和使用 。
最后聊点轻松的索引结构,哈希索引就是通过哈希表实现的索引 , 即通过被索引的列计算出哈希值,并指向被索引的记录 。
哈希索引有如下特性:
Mysql索引原理及慢查询优化
高性能Mysql 第三版
MySQL 索引是怎么实现的?索引是满足某种特定查找算法的数据结构 , 而这些数据结构会以某种方式指向数据,从而实现高效查找数据 。
具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了 , 所有索引的性能也是更好的 。
解释mysql中什么是索引?它的作用是什么?索引mysql索引怎么回事的意义·索引在数据库中mysql索引怎么回事的作用相当于目录在书籍中mysql索引怎么回事的作用类似mysql索引怎么回事,都用来提高查找信息的速度 。·索引是一个表中所包含值的列表mysql索引怎么回事,其中注明了表中包含各个值的行所在的存储位置,使用索引查找数据时,先从索引对象中获得相关列的存储位置 , 然后再直接去其存储位置查找所需信息,这样就无需对这个表进行扫描,从而可以快速的找到所需数据 。
推荐阅读
- vue中ts迁移到js,vue3 迁移
- 电脑u盘怎么隐藏软件,u盘如何隐藏文件夹
- 安卓浏览器缓存的视频在哪,安卓浏览器视频缓存在哪个文件夹
- 新媒体人如何设计产品,如何制作新媒体产品
- vb.net继续for vb的for循环如何使用
- 电脑用什么配置吃鸡,电脑用什么配置吃鸡比较好
- 如何让水工师傅推广产品,如何让水工师傅推广产品
- 安娜卖直播设备,抖音主播安娜
- 计算器vb.net 计算器免费下载