1. 什么是覆盖索引

    理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。
    理解方式二:非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段)。
    简单说就是,索引列+主键包含SELECT 到 FROM之间查询的列。

    1. 覆盖索引的利弊

    好处:

    • 避免Innodb表进行索引的二次查询(回表)
    • 可以把回表随机IO变成顺序IO加快查询效率

    弊端:
    索引字段的维护总是有代价的。因此,在建立冗余索引来支持覆盖索引时就需要权衡考虑了。