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