聚簇索引
Innodb在进行数据存储的时候,一定会将数据和表的某一列绑定到一起,这个列可以是主键,如果没有主键选择唯一非空列,如果都没有,引擎会隐式的使用一个6字节的rowid作为这个列,根据这样的列来创建索引,并且一个表只有一个聚簇索引。
非聚簇索引
也称为二级索引,非聚簇索引的叶子节点中不再是整行记录,而是聚簇索引的id值,所以查询时使用二级索引的时候,通常需要进行回表。 myisam存储引擎中只有非聚簇索引
回表
当使用二级索引进行查询的时候,因为二级索引的叶子结点上存储的是聚簇索引中的id值,所以需要根据id值到聚簇索引中再次查询才能拿到整行数据,这个过程就是回表,回表操作会影响查询效率,所以通常情况下应尽量避免回表操作。
索引覆盖
查询中所需要的字段都属于索引字段,此情况就属于索引覆盖,因为所需要查询的数据在索引树上可以找到,不需要回表,此时提升了查询效率,如果所查询字段中不包含索引列,那么需要回表操作才能查询到数据。
最左匹配
创建索引的时候可以选择多个列组成联合索引,联合索引在匹配的时候要遵循最左匹配原则。如组合索引name,age,where name = “a” and age = 12 ,单独age =12 的时候索引失效,索引失效问题后续进行完善汇总。
索引下推
将筛选的工作下沉到存储引擎层进行,可以让进入到server层的数据减少。
|