文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 集群性能/ 语句中存在“in 常量”导致SQL执行无结果
更新时间:2024-07-01 GMT+08:00

语句中存在“in 常量”导致SQL执行无结果

问题现象

简单的大表过滤的SQL语句中有一个“in 常量”的过滤条件,常量的个数非常多(约有2000多个),基表数据量比较大,SQL语句执行无结果。

原因分析

执行计划中,in条件还是作为普通的过滤条件存在。这种场景下,join操作的性能优于in条件,最优的执行计划应该是将“in 常量”转化为join操作。

分析过程

  1. 打印语句的执行计划:

  2. 执行计划中,in条件还是作为普通的过滤条件存在。这种场景下,join操作的性能优于in条件,最优的执行计划应该是将“in 常量”转化为join操作。

处理方法

  1. GUC参数qrw_inlist2join_optmode可以控制把“in 常量”转join的行为,默认是cost_base的。如果优化器估算不准,可能会出现需要转化的场景没有做转化,导致性能较差。
  2. 这种情况下可以通过设置qrw_inlist2join_optmode为rule_base来规避解决。

    1
    set qrw_inlist2join_optmode to rule_base;