Mysql索引以及Btree和B+tree

Mysql索引以及Btree和B+tree

Mysql索引以及Btree和B+tree

1.索引的本质:

索引类似于书籍的目录,用于帮助MySQL更高效地定位和检索数据。MySQL索引是一种数据结构,目的是减少磁盘I/O操作,提高数据查询速度。

2.二叉搜索树(Binary Search Tree, BST):

在理想情况下,BST可以通过比较节点值实现高效的查找,但在最坏的情况下,如果插入顺序导致BST退化为链表形态,则查询效率大大降低。

3.平衡二叉树(Balanced Binary Search Tree, 如AVL、红黑树等):

平衡二叉树通过自我调整保持左右子树高度差不超过1,确保查询效率稳定。但源码下载wcqh.cn即使是平衡二叉树,由于每个节点只能存储少量数据(例如一个元素),对于MySQL这样的系统来说,其单位磁盘块(配置)中包含的有效数据过少,会导致I/O操作频繁,查询性能不高。

4.B-tree(B树):

B树相比于二叉树的优势在于,每个节点可以拥有多个子节点(M阶B树就有M个子节点),这样单个节点可以存储多个元素,提高了每个磁盘块的利用率。这样做减少了查询时所需的层级数量,从而减少了I/O操作次数。

5.B+tree(B+树):

B+tree是对B树的改进,尤其适用于数据库索引:叶子节点存储所有数据,非叶子节点仅存储索引信息。叶子节点之间通过指针连接,便于范围查询,只需要遍历叶子节点即可,不需要像B树那源码下载wcqh.cn样可能需要访问非叶子节点。每个节点可以存储更多元素,进一步增加了每个磁盘块包含的有效数据量,降低了I/O成本。

总结:

MySQL选择B+tree作为索引数据结构的原因主要是考虑到磁盘I/O效率以及对大量数据和范围查询的支持能力。同时,MySQL中默认配置的一个节点(即磁盘块)通常能够存储16KB的数据,这也是设计索引结构时需要考虑的重要因素。

B+树由于非叶子节点不存储数据,而是只存储索引信息,使得单个节点能容纳更多的索引项,进而大幅提升了数据存储量。三层B+树理论上可以支持12亿条数据的存储,远高于B树,这对于大规模数据查询非常有利,且查询次数较少,通常只需经过3次I/O即可找到所需数据

问题:

源码下载wcqh.cn什么不推荐UUID做主键?

UUID它是没有任何规律的,这样它在插入的时候也没有规律,它可能就会插在这里,就会多一个分叉出来。在前边再插一条又多一个分叉,这边又多一个分叉。到最后可能这个节点它就保存了一条数据,这节点它也就保存了一个一条条数据。这样就会造成了一个配置之间的浪费,而betray就是因为这个原因而导致节点增多,层级增多的,所以不会用UUID来当主键

为什么不建议写select * ?

要避免回表,减少一次查询

为什么inno DB一定要建立一个主键索引?

主键索引它下边直接保存了数据。而非主键索引,它下边表保存的是标识,当查到标识之后,还要回表到主键索引来查询数据。所以它一定要建立主键索引

源码下载wcqh.cn么是回表?

inno DB索引获取的过程来看一下。首先是主键索引,然后主键索引它最下面直接保存了真正的数据。这边是根据name创建的索引。在name索引中他拿到主键值,再通过主键值到主键索引中获取数据。那么这一步到主键索引中获取数据就是回表。因为回表它多一步操作,所以咱们要尽量的避免回表

什么是索引覆盖?

所查询的字段是建立索引的字段,就不会回表查询其他字段,所以可以考虑将查询的列创建组合索引,避免回表操作,这样就会增加效率。不过也不能一直追求索引覆盖,需要评估,不然索引数据就会越来越大,也会影响效率的。

什么是最左原则?

查询语条件按照组合索引的顺序从左到右去匹配索引字段

作者最新博文
2源码下载wcqh.cn020-08-29 07:53:59

© 版权声明
THE END
喜欢就支持一下吧
点赞164 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容