B-tree索引如何在mysql中工作

时间:2010-03-02 11:15:35

标签: mysql database search b-tree

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

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

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

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

2 个答案:

答案 0 :(得分:21)

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

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

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

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

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

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

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

答案 1 :(得分:0)

MySQL InnoDB实际上正在使用B + Tree,它比B-Tree增加了更多功能。

例如:

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

在每个叶节点中添加双向指针,以加快范围搜索

B树

B-Tree

B +树

B+Tree