聚簇索引
定义:并不是一种单独的索引类型,而是一种数据存储方式,它实际上是在同一结构中保存了 B-tree 索引和数据行。聚簇索引具有唯一性,通常默认主键为聚簇索引,如果没有定义主键,会选择非空的唯一索引代替。如果没有这样的索引,会隐式的定义一个主键来作为聚簇索引。
优点:
1、行数据和聚簇索引的叶子节点存储在一起,同一页中会有多条行数据,访问同一数据页不同行记录时,已经把页加载到了Buffer中(缓存器),再次访问时,会在内存中完成访问,不必访问磁盘。
2、聚簇索引对于主键的排序查找和范围查找速度非常快
缺点:
1、插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
2、更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
3、二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。
辅助索引
定义:在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。
优点:对数据新增/修改/删除的影响很小
缺点:检索效率比聚集索引低