优先考虑覆盖索引
什么是覆盖索引?
理解方式一:
索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它 不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数 据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。
理解方式二:
非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有 列 (即建索引的字段正好是覆盖查询条件中所涉及的字段)。
简单说就是, 索引列+主键 包含 SELECT 到 FROM之间查询的列 。
举例:
select age from studen where age > 123;
覆盖索引的利弊
好处:
1.避免Innodb表进行索引的二次查询(回表)
2.可以把随机I/O变成顺序I/O加快查询效率
弊端:
索引字段的维护总是有代价的。因此,在建立冗余索引来支持覆盖索引时就需要权衡考虑了。这是业务DBA,或者称为业务数据架构师的工作。