更新时间:2024-06-20 GMT+08:00
语句中存在“in 常量”导致SQL执行无结果
问题现象
简单的大表过滤的SQL语句中有一个“in 常量”的过滤条件,常量的个数非常多(约有2000多个),基表数据量比较大,SQL语句执行无结果。
原因分析
执行计划中,in条件还是作为普通的过滤条件存在。这种场景下,join操作的性能优于in条件,最优的执行计划应该是将“in 常量”转化为join操作。
分析过程
- 打印语句的执行计划:
- 执行计划中,in条件还是作为普通的过滤条件存在。这种场景下,join操作的性能优于in条件,最优的执行计划应该是将“in 常量”转化为join操作。
处理方法
- GUC参数qrw_inlist2join_optmode可以控制把“in 常量”转join的行为,默认是cost_base的。如果优化器估算不准,可能会出现需要转化的场景没有做转化,导致性能较差。
- 这种情况下可以通过设置qrw_inlist2join_optmode为rule_base来规避解决。
1
set qrw_inlist2join_optmode to rule_base;
父主题: 集群性能