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