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 或者索引。。