数据库索引最常见的三个误区,面试和线上各错一遍
【摘要】 问:索引是不是越多越好?不是。每个索引都要在写入时维护,插入、更新、删除都会变慢。更隐蔽的成本是优化器选择困难:索引太多时,优化器可能选错执行计划。经验法则是,单表索引控制在 5 个以内,优先覆盖高频查询,定期清理“建了但没人用”的索引。问:复合索引的列顺序重要吗?非常重要。复合索引 (a, b, c) 能支持 a、(a,b)、(a,b,c) 的查询,但不能直接支持 b 或 (b,c)。最左...
问:索引是不是越多越好?
不是。每个索引都要在写入时维护,插入、更新、删除都会变慢。更隐蔽的成本是优化器选择困难:索引太多时,优化器可能选错执行计划。经验法则是,单表索引控制在 5 个以内,优先覆盖高频查询,定期清理“建了但没人用”的索引。
问:复合索引的列顺序重要吗?
非常重要。复合索引 (a, b, c) 能支持 a、(a,b)、(a,b,c) 的查询,但不能直接支持 b 或 (b,c)。最左前缀原则决定了列顺序要按“等值条件在前、范围条件在后、选择性高的在前”来排。一个常见错误是把 status 这种低基数列放最前面,结果索引区分度很低。
问:加了索引为什么还是慢?
可能原因有很多:函数操作导致索引失效(WHERE DATE(created_at) = '2026-10-31')、隐式类型转换(字符串列传数字)、LIKE '%xxx' 前置通配符、回表次数太多、统计信息过期导致优化器选错。排查时先 EXPLAIN 看执行计划,别猜。
索引设计不是“给 WHERE 条件加索引”这么简单,它和查询模式、数据分布、写入频率绑在一起。先看慢查询日志,再谈加索引。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)