拿下技术面上传简历

订单表 orders 约 2000 万行,字段有 id(主键)、user_id、status(只有 3 个取值:待支付/已支付/已取消)、created_at、amount,现已有单列索引 idx_user_id(user_id)。线上核心接口执行:SELECT * FROM orders WHERE user_id = ? AND status = ? ORDER BY created_at DESC LIMIT 20; EXPLAIN 显示 key=idx_user_id、rows≈3 万、Extra 里有 Using filesort。你会怎么调整索引?为什么建 (user_id, status, created_at) 而不是 (user_id, created_at, status)?

工程与系统设计数据与存储1-3 年知识点 1 个

面试官在考什么

判断候选人是否真的理解联合索引的字段顺序如何同时服务等值过滤和排序,而不是背最左前缀的口诀。

SQL 与索引

回答框架 · 前两步

  1. 建 (user_id, status, created_at) 联合索引:两个等值列在前,排序列放在最后,可以让 ORDER BY created_at 直接利用索引有序性,消除 filesort,只需按序取前 20 条再回表。
  2. 建 (user_id, created_at, status) 的问题是排序列插在等值列前面,status 无法用于索引定位,只能回表后过滤或靠索引下推,扫描和回表的行数明显变多。

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

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

同一能力域的其他题