Yihui’s Blog

在 MySQL 中建索引时需要注意哪些事项?

日期:2026-07-05 难度:简单 标签:#面试 #八股 #MySQL #索引设计 #VIP

一句话答案

建索引要围绕高频查询、过滤条件、排序分组和字段区分度设计,同时控制索引数量和宽度,避免低选择性字段、频繁更新字段、过长字段和重复索引带来的写入与存储成本。

面试口语版

索引不是越多越好。建索引前要看业务查询,优先给高频 WHERE、JOIN、ORDER BY、GROUP BY 字段建合适索引。联合索引要考虑最左前缀,把等值条件、区分度、排序需求结合起来。不要给区分度很低的字段单独建索引,比如性别;也不要无脑给大字段建索引,可以考虑前缀索引。索引会占空间,也会影响插入、更新、删除,所以要定期用慢 SQL、EXPLAIN 和线上指标评估。

原理拆解

flowchart TD
  A[准备建索引] --> B[确认高频 SQL]
  B --> C[分析 WHERE JOIN ORDER GROUP]
  C --> D[选择单列或联合索引]
  D --> E[检查区分度和最左前缀]
  E --> F[用 EXPLAIN 验证]
  F --> G[上线后观察慢 SQL 和写入成本]

关键细节

  • 优先服务高频、慢查询、核心链路 SQL。
  • 联合索引字段顺序要考虑等值、范围、排序和区分度。
  • 避免重复索引,比如已有 (a,b) 时通常不需要单独 (a)。
  • 低区分度字段单独索引价值有限。
  • 长字符串可考虑前缀索引,但要评估选择性。
  • 频繁更新字段建索引会增加维护成本。
  • 不要滥用索引,索引会占磁盘、占内存、拖慢写入。

面试官追问

  1. 联合索引字段顺序怎么确定?
  2. 为什么性别字段不适合单独建索引?
  3. 如何发现重复索引?
  4. 索引会带来哪些负面影响?
  5. 大字段如何建索引?

常见错误说法

错误说法问题更好的说法
where 后的字段都要建索引过于粗暴要看频率、选择性、组合和成本
索引越多查询越快忽略写成本和优化器选择索引要服务核心 SQL,数量可控
区分度低也没关系错误区分度低可能过滤效果差

学习清单

  • 针对 5 条典型 SQL 设计索引。
  • 学会查重复索引和未使用索引。
  • 用 EXPLAIN 验证索引是否命中。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文