Skip to content
阅读进度

如何理解SQL 索引与查询计划? ​

返回 架构与 SDK 目录

标准回答 ​

B-tree 适合很多等值、范围和排序访问,复合索引顺序应与过滤选择性、范围和排序需求结合。并不是每个 WHERE 字段都各建一个索引就最优;索引会占用空间、拖慢写入并影响维护。

分析先看实际查询、参数分布和计划:估计行数与实际行数是否相差很大,扫描了多少行,是否发生额外排序、回表、磁盘读或锁等待。顺序扫描不一定错误,小表或高比例返回可能更划算。

EXPLAIN ANALYZE 会真正执行语句,不能随意对有副作用的线上写操作使用。先在合适环境检查,配合缓冲和时延信息理解瓶颈。慢查询也可能在等锁或连接,不能只通过加索引修复所有超时。

追问与回答 ​

复合索引前列是范围条件会怎样 ​

后续列能否进一步减少扫描或支持排序取决于查询与规划器,不能机械套用一个口诀;用实际计划验证。

为什么加索引后性能没有提高 ​

可能选择性低、统计过时、表达式不匹配、返回量过大或瓶颈不在扫描。比较计划和资源而非只看索引存在。

易混淆点 ​

  • 看到 Seq Scan 就断言 SQL 必须优化。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。