更新时间:2024-05-07 GMT+08:00
执行计划中有NestLoop导致SQL语句执行慢(not in和not exists)
问题现象
客户的SQL语句执行慢,执行计划中有NestLoop。
原因分析
- NestLoop是导致语句性能慢的主要原因。
- Hashjoin只能做等值关联,NestLoop的条件中有or条件,所以无法用Hashjoin求解。
- 导致出现这个现象的原因是由not in的语义决定的(具体可以参考外网关于not in 和 not exists的介绍)。
分析过程
- 通过explain verbose打印语句执行计划,观察SQL语句中有not in 语法。
- 执行计划中有NestLoop。
处理方法
- 大多数场景下,客户需要的结果集其实是可以通过not exists获得的,因此上述语句可以通过修改将not in 修改为not exists。
父主题: 集群性能