MySQL InnoDB 索引

索引是存储引擎实现的,即使每个存储引擎的索引一样,其实现方式也是不一样的。

InnoDB 主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。

非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

基于主键索引和普通索引的查询有什么区别?

  • 如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
  • 如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。

也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。

什么时候需要建立联合索引,当有这样一张表,表内有身份证号、名字等信息,我们有一个需求是需要根据身份证号查询出来名字,这个需求很高频,这时候如果单独给身份证号建立一个索引,查询名字的话还是需要回表查,我们可以利用覆盖索引这一特点,对身份证号和名字建立联合索引,就不需要回表查询名字。

重建索引

索引可能会因为删除、新增数据或者页分裂等操作导致数据有空洞,重建索引会释放多余的索引控件重新排列。

如何合理重建索引

alter table T engine=InnoDB
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!