首页/数据/数据库速查/覆盖索引(Using index)
性能与调优57 条

覆盖索引(Using index)

查询列全部命中索引列时无需回表:Extra 显示 Using index;把高频查询的返回列并入联合索引是常见提速手段,注意索引体积膨胀。

数据库速查数据更新于 2026-10-12

改造示例

改造示例
-- 原查询需要回表
SELECT user_id, status, amount FROM appdb.orders WHERE user_id = 1;
-- 建覆盖索引
ALTER TABLE appdb.orders ADD INDEX idx_cover (user_id, status, amount);
-- 再 EXPLAIN:Extra = Using index
收益省回表随机 IO,吞吐显著提升
代价索引更大、写更多列;大字段(如 TEXT)不适合并入
边界SELECT * 天然破坏覆盖
回表次数是隐藏成本:RANGE 扫描 10 万行 = 最高 10 万次随机读,覆盖索引直接消掉这笔账。

易错点

  • 把大列(备注/JSON)塞进覆盖索引:索引膨胀到与表相当的体积
  • 只看 EXPLAIN 变快不看写负载:高频写入表加覆盖索引要评估写放大

数据来源与参考

  • MySQL 8.0 Reference Manual: Covering Indexes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌