优先考虑覆盖索引

1.覆盖索引:一个索引包含了满足查询结果的数据就叫做覆盖索引

简单来说就是:索引列+主键 包含select 到 from 之间查询的列

好处:

1.避免Innodb表进行索引的二次查询(回表)

  1. Innodb中,二级索引在叶子节点中保存的数据是行的主键信息,如果是用二级索引查询数据,在查到相应的键值后,还需要进行二次查询来获取真实数据
  2. 在覆盖索引中,二级索引的键值可以获取我们需要的数据,避免了对主键的二次查询,减少了IO操作,提升了查询效率

2.可以把随机IO成顺序IO加快查询效率

  1. 由于覆盖索引是按照键值的顺序存储的,对于IO密集型的范围查找来说,对比随机从磁盘读取每一行的数据IO要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取IO转变为顺序IO

若不使用覆盖索引,需要进行回表操作,而不同的区可能处于不同的位置,会导致加载更多的磁盘数据

弊端:

索引字段的维护需要付出代价,因此在建立冗余索引来支持覆盖索引时就需要权衡考虑