260 字
1 分钟
MySQL 覆盖索引:如何避免回表
覆盖索引是指二级索引已经包含查询所需的全部字段。查询可以直接从索引取得结果,不必再根据主键回到聚簇索引读取完整行,因此减少 I/O。
覆盖索引的收益
- 减少回表和磁盘 I/O。
- 只读取索引中需要的列。
- 提高高频查询的执行效率。
设计时应先分析慢查询和高频查询,再选择真正需要的列组成联合索引,并把过滤条件放在合理的最左位置。
覆盖索引与索引下推
覆盖索引是“完全不回表”;索引下推是“仍可能回表,但先在存储引擎层过滤掉不符合条件的记录”。两者解决的问题不同,覆盖索引场景下没有必要再依赖索引下推。
例如 SELECT a, b FROM t WHERE c = 1,可以评估建立 (c, a, b) 联合索引,在不改业务 SQL 的情况下让查询获得覆盖。
MySQL 覆盖索引:如何避免回表
https://blog.xqcherry.top/posts/interview/mysql/covering-index/ 目录