数据库索引最常见的三个误区,面试和线上各错一遍

举报
yd_275070883 发表于 2026/11/01 00:09:57 2026/11/01
【摘要】 问:索引是不是越多越好?不是。每个索引都要在写入时维护,插入、更新、删除都会变慢。更隐蔽的成本是优化器选择困难:索引太多时,优化器可能选错执行计划。经验法则是,单表索引控制在 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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。