拿下技术面上传简历

表 orders(id BIGINT PRIMARY KEY, user_id BIGINT, status VARCHAR(16), created_at DATETIME, amount INT),已有索引 idx_user(user_id),表里 2000 万行,绝大多数订单 status='paid'。线上查询:SELECT * FROM orders WHERE user_id=? AND status='paid' ORDER BY created_at DESC LIMIT 20; EXPLAIN 结果是 type=ref、key=idx_user、rows≈18000、Extra='Using where; Using filesort'。你会怎么优化这条 SQL?如果要建复合索引,字段顺序怎么定,为什么这样定?

工程与系统设计数据与存储校招知识点 1 个

面试官在考什么

判断候选人能否从 EXPLAIN 的 key/rows/Extra 反推出真实瓶颈(回表过滤 + 排序),并理解复合索引的最左前缀与排序规则,而不是条件反射式地答“加索引”。

SQL 与索引

回答框架 · 前两步

  1. 从 EXPLAIN 看:key=idx_user 说明只用了 user_id 这棵索引树,rows≈18000 是这个用户的全部订单数,status='paid' 是回表之后才过滤的(Using where)。
  2. ORDER BY created_at 用不上 idx_user 的顺序,所以出现 Using filesort:要把 18000 行全部回表取出来再排序,最后才 LIMIT 20。

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

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

同一能力域的其他题