如果一个索引包含或者说覆盖所有需要查询的字段的值,那么就没有必要再回表查询,这就称为覆盖索引。覆盖索引是非常有用的工具,可以极大的提高性能,因为查询只需要扫描索引会带来许多好处:
- 索引条目远小于数据行大小,如果只读取索引,极大减少数据访问量
- 索引是有按照列值顺序存储的,对于I/O密集型的范围查询要比随机从磁盘读取每一行数据的IO要少的多
例如:
ads_cusprofile_et_info表,其中label_id字段建立了索引。
- 如果只是select label_id字段,查询时可直接根据索引返回结果。性能非常高
- 如果select 其他非索引字段,索引找到后则需要回表查询select 其他字段的数据。每次都会产生随机io,对性能影响非常大。
SELECT label_id AS label_id FROM ads_cusprofile_et_info WHERE label_id = 'sex'