14

当我在 mysql 中为表创建索引时,我看到 index_type 是 type BTREE。现在虽然我了解 btree(s),但我并不了解它如何存储索引以及数据库如何基于此搜索记录。

我的意思是,btree 非常适合数据库执行读取和写入大块数据,当我们为列类型创建索引时Primary key,我的理解是,它会创建一棵树并根据值类型拆分根的值根。

现在,它是仅存储ID树下的主键还是与该主键关联的整个数据?

找到想要的主ID后,数据库如何提取记录?

4

2 回答 2

25

数据库将索引的值存储为B-Tree键,将记录指针存储为B-Tree值。

每当您搜索包含某个索引列的某个值的记录时,引擎会在 中找到包含该值的键B-Tree,检索指向该记录的指针并获取该记录。

究竟什么是“记录指针”,取决于存储引擎。

  • MyISAM中,记录指针是MYI文件中记录的偏移量。

  • InnoDB中,记录指针是 的值PRIMARY KEY

InnoDB中,表本身是 a B-Tree,以 aPRIMARY KEYB-Tree键。这就是所谓的“聚集索引”或“索引组织表”。在这种情况下,所有其他字段都存储为一个B-Tree值。

MyISAM中,记录的存储没有任何特殊顺序。这称为“堆存储”。

于 2010-03-02T11:19:23.467 回答
2

MySQL InnoDB 实际上使用的是 B+Tree,它比 B-Tree 添加了更多功能。

如:

只有叶节点具有允许同一页面节点中的更多键的值以降低树高,这将减少 I/O 计数。

在每个叶子节点中添加一个双向指针,使范围搜索更快

B树

B树

B+树

B+树

于 2019-10-19T07:57:09.693 回答