Mysql索引数据结构的选择

本文探讨了数据库索引优化的选择,从二叉查找树、红黑树到跳跃表,最后阐述了为何Mysql的InnoDB存储引擎采用B+树。B+树通过叶子节点存储数据和导航值,减少了磁盘IO,同时其对范围查询的良好支持,使其成为数据库索引的理想选择。
摘要由CSDN通过智能技术生成

前言

Mysql数据库的InnoDB存储引擎通过B+树索引和自适应Hash索引来完成对数据的查询检索,而为什么要选择B+树这种数据结构作为索引的实现,也是接下来要谈论的重点。

在Mysql数据库中,数据库中存储的数据和索引是在物理磁盘中存放的,也就是说每一次的数据检索都会造成一次或多次的磁盘IO,所以减少磁盘IO也是索引需要考虑的要点。

二叉查找树

二叉查找树

二叉查找树是二叉树的一种,它每个根节点最多有两个子节点,通过中序遍历可以实现对二叉树进行有序查找。接下来我们考虑为什么没有使用二叉树作为索引数据结构。

  1. 因为二叉树的性质,如果数据库中数据量很大,会造成二叉树的高度增加,如果使用二叉查找树作为索引会导致查询数据时的多次磁盘IO,极大的降低了查询的性能。
  2. 二叉树并不维持自平衡,在极端情况下可能会退化为单链表的情况。
  3. 在数据库的应用中,有序查询或者范围查询的场景是十分普遍的,而二叉树对于范围查询的支持并不友好。

红黑树

红黑树数据结构

  1. 虽然红黑树解决了极端情况下退化为链表的情况,但是数据量增大也会导致红黑树的树高增加,造成多次磁盘IO的情况。
  2. 红黑树因为需要维持自身的平衡(插入和删除都需要额外进行调整),所以需要额外的去处理红黑树自平衡的问题。
  3. 在数据库的应用中,有序查询或者范围查询的场景是十分普遍的,而红黑树对于范围查询的支持并不友好

跳跃表

在这里插入图片描述

跳跃表的数据结构是在redis的底层数据结构中有所体现,但是为什么没有在Mysql中进行使用呢。

  1. 跳跃表是通过空间换时间的方式进行实现的,他相比于红黑树,支持了范围查询,但是如果数据量过大是,会导致跳跃表中的层级过高,造成多次的磁盘IO。

B树

clip_image002

B树可以说是和B+树最为相似的数据结构。

  1. B树的每个节点既存储导航值也存储数据,导致检索数据时不能查询更多的索引,会造成更多的磁盘IO,空间利用率较B+树较差。
  2. B树对于范围查询支持一样不是很友好。

B+树

B+树数据结构

B+树是Mysql选择作为索引的数据结构,相比于其他数据结构,B+树具备以下优点。

  1. B+树的叶子节点存储数据,非叶子节点存储导航值,这样数据库将每个节点加载到内存中时可以查询更多的索引。
  2. B+树叶子节点存储数据,并且叶子节点之前增加了前后指针,实现了有序的双向链表数据结构,使得B+树对于范围查询的支持较好。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值