MySql每个InnoDB表都有一个聚簇索引,InnoDB创建索引的具体规则如:
1.在表上定义主键PRIMARY KEY,InnoDB将主键索引用作聚簇索引;
2.如果表没有定义主键,InnoDB会选择第一个不为NULL的唯一索引列用作聚簇索引;
3.如果以上两个都没有,InnoDB 会使用一个6 字节长整型的隐式字段 ROWID字段构建聚簇索引。该ROWID字段会在插入新行时自动递增。
主键索引也叫聚簇索引,非主键索引也是二级索引。
主键索引存储的是主键id和全部数据,二级索引储存的是索引值和主键值,当我们查询的字段不在索引储存的数据中,就会进行回表,即通过普通索引找到主键值,再通过主键值查询主键索引找到要查的数据,这就是回表操作。这种情况可以建立联合索引,也叫覆盖索引。
普通索引如果查询id值,也是覆盖索引,因为它里面就储存主键值的呢。
如果sql执行做了回表操作,那么这条sql就是慢sql了。