CSDN别再一知半解啦,索引其实就这么回事!( 五 )
B+Tree 在作为索引结构时能够带来的好处有:
一 , I/O 次数更少 。 这是因为上文也说过 , BTree 的节点是存放在内存页中的 。 那么在相同的内存页大小(一般为4k)的情况下 , B+Tree 能够存储更多的键值 , 那么整体树结构的高度就会更小 , 需要的 I/O 次数也就越小 。
二 , 数据遍历更为方便 。 这个优势很明显是由有序链表带来的 。 通过叶子节点的链接 , 使得对所有数据的遍历只需要在线性的链表上完成 , 这就非常适合区间检索和范围查询 。
三 , 查询性能更稳定 。 这自然是由于只在叶子节点存储数据 , 所以所有数据的查询都会到达叶子节点 , 同时叶子节点的高度都相同 , 因此理论上来说所有数据的查询速度都是一致的 。
正是由于 B+Tree 优秀的结构特性 , 使得常用作索引的实现结构 。 在 MySQL 中 , 存储引擎 MyISAM 和 InnoDB 都分别以 B+Tree 实现了响应的索引设计 。
物理存储
虽说 B+Tree 结构都可以用在 MyISAM 和 InnoDB , 但是这二者对索引的在物理存储层次的实现方式却不相同 。 InnoDB 实现的是聚簇索引 , 而 MyISAM 实现的却是非聚簇索引 。 在介绍聚簇索引之前 , 我们需要先了解以下啥是佩奇 , 不对 , 是啥是「主键索引」和「辅助索引」 。
其实概念很简单 。 我们刚刚不是在讲 B+Tree 的时候说过 , 树的非叶子节点只存储键值 。 没错就是这个键值 , 当这个键值是数据表的主键时 , 那么所建立的就是主键索引;当这个键值是其它字段的时候 , 就是辅助索引 。 因而可以得出 , 主键索引只能有一个 , 而辅助索引却可以有很多个 。
聚簇索引和非聚簇索引的区别也就是根据其对应的主键索引和辅助索引的不同特点而实现的 。
聚簇索引说回聚簇索引 。 先丢个定义 。
聚簇索引的主键索引的叶子结点存储的是键值对应的数据本身;辅助索引的叶子结点存储的是键值对应的数据的主键键值 。
这句话的信息量挺大的 。 首先 , 分析第一句话 , 主键索引的叶子节点存储的是键值对应的数据本身 。
我们知道 , 主键索引存储的键值就是主键 。 那么也就是说 , 聚簇索引的主键索引 , 在叶子节点中存储的是主键和主键对应的数据 。 数据和主键索引是存储在一起的 , 一起作为叶子节点的一部分 。
然后 , 分析第二句话 , 辅助索引的叶子结点存储的是键值对应的数据的主键键值 。
我们又知道 , 辅助索引存储的键值是非主键的字段 。 那就也就是说 , 通过辅助索引 , 可以找到非主键字段对应的数据行中的主键 。
重点来了 。 当然主键索引和辅助索引一结合 , 能干啥呢 。 当直接采用主键进行检索时 , 可通过主键索引直接获得数据;而当采用非主键进行检索时 , 先需要通过辅助索引来获得主键 , 然后再通过这个主键在主键索引中找到对应的数据行 。
举个例子吧 。 假设有这么一个数据表 。
本文插图
本文插图
本文插图
推荐阅读
- 老程健康谈|长期熬夜的人,若身体有5个表现,是大病来袭的信号,别再熬夜了
- 教育部网站|“神押题”“内部指标”“判卷内幕”?这些高考谣言别再信了
- 【】“神押题”“内部指标”“判卷内幕”?这些高考谣言别再信了
- 绅士老司机|《爱的迫降》:不爱你的人,就别再勉强了
- 业主|这3种物业费不再交?业主别再“傻傻”送钱了,今年起
- 楼市战略|这3种物业费不再交?业主别再“傻傻”送钱了,今年起
- |今年起,这3种物业费不再交?业主别再“傻傻”送钱了
- 美好,一直在身边|今年起,这3种物业费不再交?业主别再“傻傻”送钱了
- 高考|“神押题”、“内部指标”、“判卷内幕”?这些高考谣言别再信了
- 少女薇薇安|阔腿裤别再穿了,显矮,现在流行五分裤搭高跟鞋,洋气显高显腿长
