数据库里面有两张表 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数据库sqlserverleft joincount

解决方案 »

  1.   

    用left join没问题的。写left join有时候要注意where条件的顺序。
    多看看你的SQL的执行计划,看看索引情况。
      

  2.   

    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)的数量级集合所以查询时间肯定不一样
      

  3.   

     select count(1) from uglsh.tb_installationdocuments a left join uglsh.tb_customer b on a.cid = b.id  where 1 = 1 and 
     a.cid >= 0 and b.id >= 0  改成这样就只需要0.5秒,下面的截图是第一个sql语句的执行计划.
      

  4.   

    额SQL优化问题。。count 实际上走的全表扫描,
    想要提高查询速度,就应该避免全表扫描你可以给SQL加上hint 或者索引。。
      

  5.   

     谢谢大家,查找了下资料原因找到了.
    因为NULL值与索引的特性所决定的。即null值不会被存储到B树索引。因此应该为表 t 的列 object_id 添加 not null 约束。 设计表的时候注意非空字段.哎.