mysql 使用 B-tree、B+tree 还是两者都使用?

Nou*_*ley 8 mysql index btree

我对此事进行了一些搜索,发现 Mysql 使用 B+Tree 索引,但是当我运行“show index”时,我得到的索引类型是 Btree。而且我在这篇文章中发现Mysql同时使用了Btree和B+tree。如果它同时使用两者是真的;为什么它被命名为 Btree 没有提到 B+tree,在这种情况下,每一个都使用。知道两者的区别,想做一些查询,搞清楚B-tree和B+tree索引在性能上的区别。这就引出了我的第二个问题,两者在执行某些查询时是否存在很大差异,如果是,请举例说明。先感谢您。

Fed*_*oli 9

InnoDB 使用 B+Tree 索引,而不是 B-Tree。可以在此处找到有关 InnoDB 数据结构的所有详细信息。您可能还想查看这些图表。这两个资源的作者 Jeremy Cole 是谷歌 MySQL 团队的负责人。

为什么是语法BTREE而不是B+TREE?这个问题应该向一些 MySQL 或 MariaDB 工程师提出,但我认为至少有两个可能的原因:

  • B+TREE 将是一个非常糟糕的关键字,因为它包含+通常是一个运算符。
  • 该语法比 InnoDB 更旧。它可能与ISAM存储引擎一样古老,但已不复存在。很有可能当时使用了B-TREE。

为什么文档说明 InnoDB 使用 B-Tree?好吧,并不是所有的 MySQL 用户都应该知道 B+Tree 是什么。这可能过于简单化,但在这种情况下,我认为这是可以接受的。

你写道你知道 B-Tree 和 B+Tree 之间的区别。比不同的性能特点应该是清楚的:

  • B+Tree 排序更快;
  • 当您在中间插入值时,B-Tree 会更快。

但总的来说,B+Tree 被认为是优越的。多少?我不知道,但肯定不是数量级。