以下两个SQL结果一样的,哪种写法好呢?select (select r.organ_name from ORGANIZATION r where r.organ_id=t.land_gts_id) as 部门 from CASE_DAY_LIST t;select r.organ_name as 部门 from CASE_DAY_LIST t left join  ORGANIZATION r on r.organ_id=t.land_gts_id;

解决方案 »

  1.   

    写法一有问题吧。
    你r.organ_id=t.land_gts_id过滤条件要是过滤出多条,不就出错了吗?
    这2条语句不等价。
      

  2.   

    这两SQL不等价
    语句1与下面的语句等价
    SELECT r.organ_name 
      FROM CASE_DAY_LIST t,ORGANIZATION r
     WHERE r.organ_id=t.land_gts_id
      

  3.   

    MSSQL 可以分析语句使用索引,占CPU 内存的情况 不知道ORACLE有没有工具可以分析SQL语句
      

  4.   

    第二种写法好,第一个是嵌套子查询,执行计划会强制走nested loop,如果CASE_DAY_LIST的数据量比较大,那么这个执行计划效率并不高,第二个写法CBO按cost寻找最优执行计划,执行效率是最高的。以前优化过这样一个sql,对这个印象还比较深刻。
      

  5.   

    不能这么武断下结论,ORGANIZATION表中organ_id是主键时两个语句是一样的,这种情况通常用于编码转名称。
    和表的数据量以及查询结果集有一定的关系。 ORGANIZATION表较大时,而查询结果集较小时,第一种效率可能会比较高,
     而ORGANIZATION较小,查询结果集较大时,第二种效率可能会比较高,ORGANIZATION较大两表连接可能改变原来的执行计划,导致效率低。在子查询中一般需要加上rownum=1的条件,一方面防止id重复,另一方面能提高性能。 上面说的都是可能,并没有绝对。