IT袋

当前位置:主页 > 经验教程 > 建站编程 >

什么是Mysql索引

什么是Mysql索引 Mysql索引的定义和作用(2)

时间:2023-11-28 06:11:18 来源:IT袋 作者:马勇
导读:什么是Mysql索引,2.1. 红黑树的特质 性质1 :节点要么是红色,要么是黑色 性质2 :根节点是黑色 性质3 :红黑树中红色节点的子节点都是黑色 性质4 : 叶子节点都是黑色 性质

什么是Mysql索引

什么是Mysql索引

2.1. 红黑树的特质

  • 性质1:节点要么是红色,要么是黑色
  • 性质2:根节点是黑色
  • 性质3:红黑树中红色节点的子节点都是黑色
  • 性质4:叶子节点都是黑色
  • 性质5:从任一节点到叶子节点的所有路径都包含相同数目的黑色节点

在添加或删除节点的时候,如果不符合这些性质会发生旋转,以达到所有的性质

红黑树:保证平衡

虽然解决单向列表缺点,但是还是存在缺点:

如果数据量比较大,层级就较深,检索效率就慢

3. B树(B-Tree)

B-Tree:B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉

B树(B-Tree)具有一下特点:

  • 1.多叉树结构:B-Tree是一种多叉树,每个内部节点可以有多个子节点,使得B-Tree能够有效地存储和管理大量数据。
  • 2.平衡性:B-Tree具有平衡性,这意味着从根节点到叶子节点的任何路径的长度几乎相等。这确保了在平均情况下,对树的操作(插入、删除、查找)具有稳定的性能,不会出现严重的性能退化
  • 3.按序存储:B-Tree内的节点和数据通常按照键的顺序存储,这有助于范围查询和排序操作的高效执行。
  • 4.分层结构:B-Tree具有分层结构,从根节点到叶子节点有多个级别。
  • 5.高度平衡B-Tree的高度通常是相对较低,这是因为它的平衡性和多叉性质。高度平衡有助于减少查找操作所需的磁盘访问。

什么是Mysql索引

对数据库而言,所有的数据都将会保存到磁盘上,磁盘 I/O 的效率又比较低,特别是在随机磁盘 I/O 的情况下效率更低

B树(B-Tree),高度决定了磁盘 I/O 的次数,磁盘 I/O 次数越少,对于性能的提升就越大,这也是为什么采用 B 树作为索引存储结构的原因

4. B+树(B+Tree)

B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,MySQL 的 InnoDB 存储引擎就是用B+Tree实现其索引结构

相比较于 B-Tree结构来说,B+Tree做了两个方面的优化,如图所示:

什么是Mysql索引

可以看到两部分:

  • 1.蓝色框部分,索引部分,是非叶子结点,仅仅起到索引数据的作用,不存储数据
  • 2.绿色框部分,数据存储部分,是叶子结点叶子节点中要存储具体的数据
  • 3.MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能,利于排序

B树与B+树对比

  • 磁盘读写代价B+树更低
  • 查询效率B+树更加稳定
  • B+树便于扫库和区间查询

5. Mysql索引面试题

面试官:了解过索引吗?(什么是索引)

候选人:

索引在项目中还是比较常见的,帮助MySQL高效获取数据的数据结构,主要是用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低了CPU的消耗

面试官:索引的底层数据结构了解过嘛 ?

候选人:

MySQL的默认的存储引擎InnoDB采用的B+树的数据结构来存储索引,选择B+树的主要的原因是:

第一:阶数更多,路径更短,搜索效率高

第二:磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据,而B-Tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储键值减少,指针跟着减少,相对于B+树同样保存大量数据,只能增加树的高度,导致性能降低

第三:B+树便于扫库和区间查询,叶子节点是一个双向链表

面试官:B树和B+树的区别是什么呢?

候选人

第一:在B树中,非叶子节点和叶子节点都会存放数据,而B+树的所有的数据都会出现在叶子节点,在查询的时候,B+树查找效率更加稳定

第二:在进行范围查询的时候,B+树效率更高,因为B+树都在叶子节点存储,并且叶子节点是一个双向链表

以上就是IT袋网带来的什么是Mysql索引的全面介绍了,希望给IT袋网网的网友们带来一些相关知识。

相关阅读