当我在 mysql 中为表创建索引时,我看到 index_type 是 type BTREE
。现在虽然我了解 btree(s),但我并不了解它如何存储索引以及数据库如何基于此搜索记录。
我的意思是,btree 非常适合数据库执行读取和写入大块数据,当我们为列类型创建索引时Primary key
,我的理解是,它会创建一棵树并根据值类型拆分根的值根。
现在,它是仅存储ID
树下的主键还是与该主键关联的整个数据?
找到想要的主ID后,数据库如何提取记录?
数据库将索引的值存储为B-Tree
键,将记录指针存储为B-Tree
值。
每当您搜索包含某个索引列的某个值的记录时,引擎会在 中找到包含该值的键B-Tree
,检索指向该记录的指针并获取该记录。
究竟什么是“记录指针”,取决于存储引擎。
在MyISAM
中,记录指针是MYI
文件中记录的偏移量。
在InnoDB
中,记录指针是 的值PRIMARY KEY
。
在InnoDB
中,表本身是 a B-Tree
,以 aPRIMARY KEY
为B-Tree
键。这就是所谓的“聚集索引”或“索引组织表”。在这种情况下,所有其他字段都存储为一个B-Tree
值。
在MyISAM
中,记录的存储没有任何特殊顺序。这称为“堆存储”。