关于in改为exist的优化

在测试中发现,在GP中,部分使用IN语法的sql,执行起来比较慢。要是发现有类似情况,可以优化一下,改为exist 或者not exist语法
例如
insert into my_db.my_table1
 sel
 t2.field1
,t2.field2
,t2.field3
,t2.field4
,t2.field5
,t3.field6
,2
,t3.field7
 from
 my_db.table2 t2
 inner  join
 my_db.table3  t3
 on t2.field4=t3.field4
 and t2.field8=t3.field9
 and t2.field10=t3.field11
 and t2.field12=t3.field13
 and t2.field14=t3.Tkg_field14
 and t3.field6>=0
 and t3.field15=1
 and t3.field16=1
 where  
( t2.field1,t2.field2,t2.field3 ) not in (sel field1 ,field2  ,field3  from  my_db.my_table1 )
and 
t3.field4 not in (sel field4 from my_db.my_table1 group by 1)        ;
 
 
修改为:
 
insert into my_db.my_table1
 select
 t2.field1
,t2.field2
,t2.field3
,t2.field4
,t2.field5
,t3.field6
,2
,t3.field7
 from
 my_db.table2 t2
 inner  join
 my_db.table3  t3
 on t2.field4=t3.field4
 and t2.field8=t3.field9
 and t2.field10=t3.field11
 and t2.field12=t3.field13
 and t2.field14=t3.Tkg_field14
 and t3.field6>=0
 and t3.field15=1
 and t3.field16=1
 where  not exists (select * from my_db.my_table1 aaaa where aaaa.field1=t2.field1 and aaaa.field2=t2.field2  and aaaa.field3=t2.field3  )
and not exists (select * from my_db.my_table1 aaaa where aaaa.field4=t2.field4   )
      ;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值