27. 聚簇索引的注意点有哪些?

聚簇索引表最大限度地提高了 I/O 密集型应用的性能,但它也有以下几个限制:

  • 1、插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于 InnoDB 表,我们一般都会定义一个自增的 ID 列为主键。

    关于这一点,可能面试官会换一个问法。例如,为什么主键需要是自增 ID ,又或者为什么主键需要带有时间性关联。

  • 2、更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB 表,我们一般定义主键为不可更新。

    MySQL 默认情况下,主键是允许更新的。对于 MongoDB ,其 主键是不允许更新的。

  • 3、二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

    当然,有一种情况可以无需二次查找,基于非主键索引查询,但是查询字段只有主键 ID ,那么在二级索引中就可以查找到。

  • 4、主键 ID 建议使用整型。因为,每个主键索引的 B+Tree 节点的键值可以存储更多主键 ID ,每个非主键索引的 B+Tree 节点的数据可以存储更多主键 ID 。