MySQL 索引(一)

引言:

数据库服务器有两种存储介质,分别为硬盘和内存。内存属于临时存储,容量有限, ⽽且当发⽣意外时(⽐如断电或者发⽣故障重启)会造成数据丢失;硬盘相当于永久 存储介质,这也是为什么我们需要把数据保存到硬盘上。

虽然内存的读取速度很快,但我们还是需要将索引存放到硬盘上,这样的话,当我们 在硬盘上进⾏查询时,也就产⽣了硬盘的 I/O 操作。相⽐于内存的存取来说,硬盘的 I/O 存取消耗的时间要⾼很多。我们通过索引来查找某⾏数据的时候,需要计算产⽣ 的磁盘 I/O 次数,当磁盘 I/O 次数越多,所消耗的时间也就越⼤。如果我们能让索引 的数据结构尽量减少硬盘的 I/O 操作,所消耗的时间也就越⼩。

⼆叉树

⼆分查找树是⼀种⾼效的数据检索⽅式,时间复杂度为 O(log2n)

B树

如果⽤⼆叉树作为索引的实现结构,会让树变得很⾼,增加硬盘的 I/O 次数,影响数 据查询的时间。因此⼀个节点就不能只有 2 个⼦节点,⽽应该允许有 M 个⼦节点 (M>2),在⽂件系统和数据库系统中的索引结构 经常采⽤ B 树来实现。

B+ 树

B树和B+树的差异

1.孩⼦数量 = 关键字数,而 B 树中, 孩⼦数量 = 关键字数-1。

2.非叶⼦节点仅⽤于索引,不保存数据记录,跟记录有关的信息都放在叶⼦节点 中。而 B 树中,非叶⼦节点既保存索引,也保存数据记录。

3.所有关键字都在叶⼦节点出现,叶⼦节点构成⼀个有序链表,⽽且叶⼦节点本⾝ 按照关键字的⼤⼩从⼩到⼤顺序链接

优点:

B+ 树的查询效率更⾼,这是因为通常 B+ 树⽐ B 树更矮胖(阶数更⼤,深度 更低),查询所需要的磁盘 I/O 也会更少。同样的磁盘⻚⼤⼩,B+ 树可以存储更多 的节点关键字

综上所述:

磁盘的 I/O 操作次数对索引的使⽤效率⾄关重要。虽然传统的⼆叉树数据结构查找数 据的效率⾼,但很容易增加磁盘 I/O 操作的次数,影响索引使⽤的效率。

因此在构造 索引的时候,我们更倾向于采⽤“矮胖”的数据结构。 B 树和 B+ 树都可以作为索引的数据结构,在 MySQL 中采⽤的是 B+ 树,B+ 树在查 询性能上更稳定,在磁盘⻚⼤⼩相同的情况下,树的构造更加矮胖,所需要进⾏的磁 盘 I/O 次数更少,更适合进⾏关键字的范围查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值