( 低效 ):
SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E
WHERE D.DEPT_NO = E.DEPT_NO
( 高效 ):
SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X'
FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO ) ;
怎么个高效啊
SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E
WHERE D.DEPT_NO = E.DEPT_NO
( 高效 ):
SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X'
FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO ) ;
怎么个高效啊
解决方案 »
- Oracle 相关问题
- PLSQL Developer导出数据库时(PLSQL 格式),出现cannot open file d:\tt.pde 另一个程序正在使用此文件,进程无法访问
- 如何实现oracle在月底自动运行指定的存储过程?
- 怎么知道一个用户的所有sequence。
- (在线急等)为什么我登录 Oracle Management Server失败
- 谁知道“高速缓存表”这个概念?哪里有关于它的资料?
- 请高手帮忙解决一下oracle9i安装的问题
- UnixWare下安装oracle的古老的问题,却快把我整死了!!!大虾们别见死不救啊!~!
- 怎样向oracle中大批量加入数据(100M),,以便进行测试???
- 哪里可以下载OAS3.0的技术文档?
- select to_number(2010-06-01) from dual
- 32位系统oracle SGA突破1.7G限制
第二个不加distinct 也不能去重啊
具体可以查看相应的执行计划!
当然,如果对于特定环境,比如dept表中选择出来的结果确实的唯一的,
那么第二种方式确实高效。
因为,第一种方式要找出所有的dept,emp关联的笛卡尔结果集,然后进行排序,过滤得到的结果。
第二种方式只需要遍历dept(如果结果唯一,这应该是个小表,相对的),对dept中的每条记录,去找寻emp中任意一条匹配的结果,发现后马上返回
这意味着,1,如果emp中存在dept中的索引,则不需要回到emp的表中定位结果;
2,发现一条后就可以返回,而不需要遍历所有的emp表;
所以,楼主描述的第二种方式在特定环境下相对高效。