索引——> 类似于图书馆书的索引号
MySQL使用B+树构建索引。
B+树的最底层叶子节点包含了所有的索引项。B+树在查找数据的时候,由于数据都存放在最底层的叶子节点上,所以每次查找都需要检索到叶子节点才能查询到数据。所以在需要查询数据的情况下每次的磁盘的IO跟树高有直接的关系,但是从另一方面来说,由于数据都被放到了叶子节点,所以放索引的磁盘块锁存放的索引数量是会跟这增加的,所以相对于B树来说,B+树的树高理论上情况下是比B树要矮的。也存在索引覆盖查询的情况,在索引中数据满足了当前查询语句所需要的全部数据,此时只需要找到索引即可立刻返回,不需要检索到最底层的叶子节点。
MyIsam索引
InnoDB索引
主键索引(聚簇索引)InnoDB自动创建
每个InnoDB表都有一个聚簇索引 ,聚簇索引使用B+树构建,叶子节点存储的数据是整行记录。一般情况下,聚簇索引等同于主键索引,当一个表没有创建主键索引时,InnoDB会自动创建一个ROWID字段来构建聚簇索引。
聚簇索引特点:
- 页内记录按主键大小排序成一个单向链表,页间是双向链表。
- B+树叶子节点存储完整用户记录。
辅助索引
除聚簇索引之外的所有索引都称为辅助索引。在InnoDB中,辅助索引中的叶子节点存储的数据是该行的主键值都。 在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。