拿下技术面上传简历

订单表 3 亿行,MySQL 8.0 + InnoDB。核心查询是 `SELECT ... FROM orders WHERE merchant_id=? AND status IN (1,2) ORDER BY created_at DESC LIMIT 20`,QPS 约 800,P99 从 30ms 涨到 1.2s。现有联合索引是 idx_mch(merchant_id, status, created_at),主键 order_id。你接手这个慢查询,要求说明:你第一步看什么来确认瓶颈、为什么现有索引没能避免排序、你改什么(索引还是查询)、怎么评估改动对线上写入和主从延迟的影响,以及如果业务不愿意改查询语义你怎么办。

工程与系统设计数据与存储5 年以上知识点 1 个

面试官在考什么

判断候选人能否从执行计划推回索引结构本身的约束,并在写放大、DDL 风险、业务语义之间做取舍,而不是条件反射地“加个索引”。

SQL 与索引

回答框架 · 前两步

  1. 先用 EXPLAIN ANALYZE / performance_schema 确认瓶颈确实是 filesort + 大量回表,而不是锁等待、主从延迟或数据倾斜,能在执行计划里指出 Using filesort / rows 估算与实际行数的偏差。
  2. 说清根因:等值前缀 merchant_id 是单值,但 status 为 IN 多值,索引无法在 created_at 上保持全局有序,只能回表后排序,LIMIT 无法提前终止。

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

同一能力域的其他题