SQL_exists 查询原理
2019-06-06 10:58
148 查看
通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因
exists 与in 的互换
update p_container_decl cd set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate where exists( select 1 from ( select tc.decl_no,tc.goods_no from p_transfer_cont tc,P_AFFIRM_DO ad where tc.GOODS_DECL_NO = ad.DECL_NO and ad.DECL_NO = \'sssssssssssssssss\' ) a where a.decl_no = cd.decl_no and a.goods_no = cd.goods_no ) update p_container_decl cd set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate where (decl_no,goods_no) in ( select tc.decl_no,tc.goods_no from p_transfer_cont tc,P_AFFIRM_DO ad where tc.GOODS_DECL_NO = ad.DECL_NO and ad.DECL_NO = ‘ssssssssssss’ )
例如:表A(小表),表B(大表)
1:
效率低,用到了A表上cc列的索引;
select * from A where cc in (select cc from B)
效率高,用到了B表上cc列的索引。
select * from A where exists(select cc from B where cc=A.cc)
如果转换下:表A(大表),表B(小表)
还是上面的SQL ,in 的效率要比 exists 高
相关文章推荐
- SQL 语句查询Exists原理
- SQL语句查询谓词Exists原理之我见
- SQL语句查询谓词Exists原理之我见
- T-SQL查询的逻辑工作原理
- 利用索引和表扫描原理优化查询SQL语句
- 原理分析之四:一次SQL查询的源码分析
- 原理分析之四:一次SQL查询的源码分析
- 原理分析之四:一次SQL查询的源码分析
- sql 子查询中的exists 和 in
- sql查询语句的优化,exists与in的更换
- sql语句 子查询any exists left
- sql查询语句的优化,exists与in的更换
- SQL查询优化--索引的原理及常见类型
- SQL - 查询条件 In与exists的区别
- SQL查询中in和exists的区别分析
- sql关键字exists原理
- SQL查询优化原理分析(二)
- SQL查询中in和exists的区别分析
- SQL查询中in和exists的区别
- SQL分页查询原理及其实例