日期:2014-05-17  浏览次数:21007 次

oracle 的外连接 left join
数据库里面有两张表 A表100W,B表20W,sql语句是
 select coun(1) from A left join B on a.id = b.id 
 查询结果执行10秒  
 后面在写一条 
select count(1) from B  inner join A  on B.id = A.id
 
查询结果只需0.几就出来了  给我的感觉就是第一条没用到索引 为什么会出现这种情况?
如果直接用 
select count(1) from A ,B where a.id = b.id
 执行效果和第二条差距不大.
   我以前主要是在sqlserver上面开发,现在突然发现在oracle上执行一样的语句效率还要低些,现在大多数sql语句都是用的外连接,杂办?难道只有改代码?
oracle 数据库 sqlserver left?join count

------解决方案--------------------
用left join没问题的。写left join有时候要注意where条件的顺序。
多看看你的SQL的执行计划,看看索引情况。
------解决方案--------------------
select coun(1) from A left join B on a.id = b.id 
100万*20万 的数量级集合

select count(1) from B  inner join A  on B.id = A.id
20万*A表满足(B.id = A.id)的数量级集合

所以查询时间肯定不一样
------解决方案--------------------
额。。。SQL优化问题。。

count 实际上走的全表扫描,
想要提高查询速度,就应该避免全表扫描

你可以给SQL加上hint 或者索引。。