ORACLE 中IN和EXISTS区别
来源:互联网 发布:什么人适合做网络主播 编辑:程序博客网 时间:2024/06/05 18:25
http://trailblizer.blog.163.com/blog/static/59630364201024101539938/
in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。
一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
带in的关联子查询是多余的,因为in子句和子查询中相关的操作的功能是一样的。如:
select staff_name from staff_member where staff_id in
(select staff_id from staff_func where staff_member.staff_id=staff_func.staff_id);
为非关联子查询指定exists子句是不适当的,因为这样会产生笛卡乘积。如:
select staff_name from staff_member where staff_id
exists (select staff_id from staff_func);
- ORACLE中in 和 exists区别
- oracle中in和exists的区别
- ORACLE中in 和 exists区别
- ORACLE 中IN和EXISTS区别
- oracle中in和exists的区别
- Oracle中in和exists的区别
- oracle中in和exists区别
- oracle 中 in 和exists用法区别
- oracle中in和exists的区别
- oracle中in和exists区别
- oracle中in和exists的区别
- oracle 中exists,not exists的用法以及和exists和in的区别
- Oracle中in和exists的区别和选择
- oracle中exists和in的区别和效率比较
- oracle 中in 和exists
- 关于Oracle中in和exists的区别
- 关于Oracle中in和exists的区别
- 关于Oracle中exists和in的区别
- 程序员必须知道的10大基础实用算法及其讲解
- struts2数据校验问题-服务器端数据验证
- bash登录时几个配置文件的比较
- nginx基本配置与参数说明
- 德国队胜利的背后
- ORACLE 中IN和EXISTS区别
- [转][c++0x/c++11] lambda 表达式
- 进出口商品报验性质及免验办法
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
- iPhone的系统信息使用[UIDevice currentDevice]
- 按键监听
- windows系统右键打开cmd命令窗口
- 一年以来表现不力,改任务为学习使用MongoDB了
- android开发笔记之activity之数据逻辑分开处理后界面更新