贝利信息

SQL 查询慢一定是没索引吗?

日期:2026-01-19 00:00 / 作者:冷炫風刃
不一定。查询慢的原因多样,索引缺失只是其一;即使有索引也可能因函数、类型转换、模糊匹配等失效;执行计划(如EXPLAIN ANALYZE)比单纯有无索引更关键;其他原因包括SELECT *、JOIN不当、统计信息过期、锁等待及硬件瓶颈等。

不一定。查询慢的原因很多,索引缺失只是常见原因之一,但不是唯一原因。

索引确实重要,但不是万能的

没有合适索引时,数据库可能走全表扫描,数据量大时自然变慢。但即使有索引,也可能不生效:比如查询条件用了函数(WHERE UPPER(name) = 'ABC')、隐式类型转换(WHERE user_id = '123',而 user_id 是整型)、或使用了不匹配的前缀(LIKE '%abc' 无法用到 B-tree 索引)。这时加了索引也白加。

执行计划比“有没有索引”更关键

真正要查的是数据库实际怎么执行的。用 EXPLAIN(MySQL/PostgreSQL)或 EXPLAIN ANALYZE 看执行计划,关注几件事:

其他高频性能杀手

很多慢查询和索引完全无关:

排查思路建议

别一上来就加索引。先做这几步: