InnoDB
索引分为聚集索引(聚簇索引)与二级索引。
聚集索引:
1: 全表唯一且必有一个,主键索引属于聚集索引。
2: 索引项的顺序就是表中数据记录的物理顺序。
3: 若定义了主键索引InnoDB则使用主键索引当做该表的聚集索引,没有主键索引则使用第一个非空的唯一(UNIQUE)索引作为聚集索引,二者都没有则自动创建一个6字节的自增隐藏列作为聚集索引,此列包含了每一行的自增row ID,此聚集索引名为GEN_CLUST_INDEX,按此row ID排序的行在物理上按插入顺序。
二级索引:
除了聚集索引以外的全属于二级索引,每个二级索引列包含主键值,通过二级索引查询的时候首先查到的是主键值,然后根据主键值通过主键索引找到相应的数据块。
参考资料:https://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html
结论:
理论上主键索引比二级索引有更好的查询性能,因为数据的物理存储顺序就是主键索引的顺序,并且通过二级索引进行查询的时候,如果二级索引没有覆盖所有查询列(覆盖索引),那么还是要通过二级索引项的主键值查询主键索引才能找到对应的行记录。