已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
一张 40 列的宽表,行宽约 1.5KB,单表约 42GB,现有 5 个二级索引。写入画像:INSERT ~600 QPS + 状态 UPDATE ~200 QPS。
一条高频查询(对账明细列表,~300 QPS):
SELECT merchant_id, status, created_at
FROM t_message
WHERE merchant_id = ?
AND status = ?
AND created_at > ?
ORDER BY created_at DESC
LIMIT 100;
对应的联合索引 idx_merchant_status_time (merchant_id, status, created_at),覆盖了所有 SELECT 列,但在某些场景下优化器会退化成「索引扫描 + 回表过滤」。
EXPLAIN FORMAT=JSON 显示 cost 估算中未考虑回表成本,仅计算了索引扫描的开销。ANALYZE TABLE 已执行,但选择性比例仍较低。EXPLAIN、SHOW ENGINE INNODB STATUS、SHOW TABLE STATUS 等命令,量化判断是否应该使用覆盖索引?