哪种写法好呢?
以下两个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;
------解决方案--------------------一般来说是第二种写法好一些,其实严格来说的话,也要看两个表的数据量。
------解决方案--------------------这两SQL不等价
语句1与下面的语句等价
SELECT r.organ_name
FROM CASE_DAY_LIST t,ORGANIZATION r
WHERE r.organ_id=t.land_gts_id
------解决方案--------------------相比第二个写法效率。
------解决方案--------------------第二种方法效率高,易读,常用!!
------解决方案--------------------方法2
方法1,可能会造成用不了索引
------解决方案--------------------第二种写法好,第一个是嵌套子查询,执行计划会强制走nested loop,如果CASE_DAY_LIST的数据量比较大,那么这个执行计划效率并不高,第二个写法CBO按cost寻找最优执行计划,执行效率是最高的。以前优化过这样一个sql,对这个印象还比较深刻。
------解决方案--------------------不能这么武断下结论,ORGANIZATION表中organ_id是主键时两个语句是一样的,这种情况通常用于编码转名称。
和表的数据量以及查询结果集有一定的关系。
ORGANIZATION表较大时,而查询结果集较小时,第一种效率可能会比较高,
而ORGANIZATION较小,查询结果集较大时,第二种效率可能会比较高,
ORGANIZATION较大两表连接可能改变原来的执行计划,导致效率低。
在子查询中一般需要加上rownum=1的条件,一方面防止id重复,另一方面能提高性能。
上面说的都是可能,并没有绝对。
------解决方案--------------------必须第二种方法好