第 6 站练习答案
对比计划
sql
CREATE INDEX idx_order_customer ON sales_order(customer_id);
EXPLAIN ANALYZE
SELECT order_id, total_amount
FROM sales_order
WHERE customer_id = 1 AND status = 'paid'
ORDER BY created_at DESC, order_id DESC
LIMIT 20;
SHOW INDEX FROM sales_order;合格报告应记录实际 rows、loops、耗时、是否额外排序、返回行数和数据量,而不是只比较 key 名称。
删除前证据
至少包括:查询指纹覆盖、不同参数分布、读写基线、不可见期监控、回滚语句、DDL 时间与资源预算、备份及副本影响。不可见实验不能捕获查询提示强制索引等所有边界。
加码题解:索引与执行计划
sql
CREATE INDEX idx_orders_status_time ON orders(status, placed_at DESC, id DESC);
EXPLAIN ANALYZE SELECT id FROM orders
WHERE status='PENDING' ORDER BY placed_at DESC, id DESC LIMIT 20;关键推理
联合索引对齐过滤与排序,EXPLAIN ANALYZE 用实际行数验证估算。
可替代方案
使用 invisible index 观察删除影响,避免直接 DROP 后才发现回滚困难。
典型错误
函数包裹索引列、索引宽度失控、只看 key 命中不看 rows 与耗时。
复盘时请附上版本、隔离级别、执行计划或恢复位置中的相关证据;没有证据的“看起来正确”不算完成。