深度思考mysql面经

推荐

1 索引下推

Mysql性能优化:什么是索引下推?

1.1 定义

索引下推(Index Condition Pushdown,简称 ICP)是一种数据库优化技术。在传统的数据库查询中,数据库首先使用索引检索来找到符合索引条件的行,然后将这些行的数据从存储引擎中读取到内存,接着再过滤掉不满足其他WHERE子句条件的行。而在索引下推技术中,某些可以被下推的过滤条件被应用在索引扫描阶段,即在从存储引擎取数据之前,从而避免了取出不必要的行。

1.2 建议参考推荐文章中的例子

2 mysql的b+树一般是几层

2到3层就可以,一个节点存储的数据量是一页(理解这一点很重要),一页默认是16KB,假设主键是int类型,那么一个节点能存储key的数量(161024)÷(4+6)=1638,6B是指针的大小,那么三层B+树,叶子节点的数量就有16381638=2683044个,每个节点是一页,假设一行数据是1KB,那么一个节点能存16行数据,所以3层B+树总共能存储的数据量是2683044*16=42928704行。

2 mysql的大小表前后顺序对inner join的效率有影响吗?

mysql的大小表前后顺序对inner join的效率有影响吗?

3 为什么MySQL索引要使用B+树,而不是B树或者红黑树?

  • 范围查询效率: B+树的叶子节点之间通过指针连接,这使得范围查询更加高效。当需要进行范围查询时,B+树可以从范围的起始点开始,在叶子节点层顺序读取数据,直到范围的结束点。而在B树中,范围查询可能需要在多个层级中进行遍历。

  • 查询稳定性: B+树查询的性能更加稳定。由于所有的数据都位于B+树的叶子节点,每次查询(无论命中还是未命中)所需要遍历的路径长度都大致相同。而B树由于数据分布于各个节点,查询的路径长度可能会有所不同。

  • 空间利用率: 由于B+树非叶子节点不存储数据,只存储键和子节点指针,因此每个节点可以存储更多的键。这使得B+树的分支因子更大,树的高度更低。

  • 红黑树: 红黑树是一种自平衡的二叉搜索树,用于保证在最坏的情况下,树的高度不超过2*log(n)。但是在数据库中,由于数据存储在磁盘上,我们更关心磁盘I/O次数,而非比较次数。B+树因其高的分支因子,对于磁盘I/O进行了优化,通常在查找时会比红黑树产生更少的磁盘I/O。

4 关于B树和B+树的高度:

一般一个B+树节点占用一个页面,如果一个B树的节点也占用一个页面,因为B树的非叶节点存储了数据,那么一个页面能存储的B树的分支数更少,所以理论上B树更高对不对?

你是对的,如果B树的非叶子节点也存储数据,并且一个节点限制为一个页面的大小,那么B树每个节点能存储的子节点数确实会比B+树少。这也意味着B树的高度可能会比B+树更高。

但是,B树的一个节点可以存储更多的数据(因为非叶子节点也存数据)。如果我们只看数据存储的能力,B树可能更加高效。但是,正如前面所述,B+树对于范围查询、稳定的查询性能、以及空间利用率方面都有优势。这些优势使得B+树更适合用于数据库索引。

总的来说,选择B+树作为MySQL的索引结构并不仅仅是基于树的高度或者一个节点可以存储的数据量,而是基于其在多个方面的综合性能优势。

猜你喜欢

转载自blog.csdn.net/yxg520s/article/details/132190390
今日推荐