
# 语句中存在"in 常量"导致SQL执行无结果
#### 问题现象
简单的大表过滤的SQL语句中有一个"in 常量"的过滤条件，常量的个数非常多(约有2000多个)，基表数据量比较大，SQL语句执行无结果。
#### 原因分析
执行计划中，in条件还是作为普通的过滤条件存在。这种场景下，join操作的性能优于in条件，最优的执行计划应该是将"in 常量"转化为join操作。
#### 分析过程
1. 打印语句的执行计划： 
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000001163919501.png "点击放大")
   
   
2. 执行计划中，in条件还是作为普通的过滤条件存在。这种场景下，join操作的性能优于in条件，最优的执行计划应该是将"in 常量"转化为join操作。
 
#### 处理方法
1. GUC参数[qrw_inlist2join_optmode](https://support.huaweicloud.com/devg-dws/dws_04_0909.html)可以控制把"in 常量"转join的行为，默认是cost_base的。如果优化器估算不准，可能会出现需要转化的场景没有做转化，导致性能较差。
2. 这种情况下可以通过设置qrw_inlist2join_optmode为rule_base来规避解决。 
   ```
   set qrw_inlist2join_optmode to rule_base;
   ```
   
   
 
