Search

8-4-3. 코드명 조회 - 스칼라 서브쿼리 vs. 조인

-- [SQL-8-4-3-a] EXPLAIN (ANALYZE,BUFFERS,COSTS OFF) SELECT t1.* ,(SELECT s1.base_cd_nm FROM startdbpg.cm_base_cd s1 WHERE s1.base_cd_dv = 'ord_st' AND s1.base_cd = t1.ord_st ) ord_st_nm ,(SELECT s2.base_cd_nm FROM startdbpg.cm_base_cd s2 WHERE s2.base_cd_dv = 'pay_tp' AND s2.base_cd = t1.pay_tp ) pay_tp_nm FROM startdbpg.tr_ord_big t1 WHERE t1.ord_dtm >= '2025-01-01'::date AND t1.ord_dtm < '2025-02-01'::date;
SQL
복사
-- [SQL-8-4-3-b]: [SQL-8-4-3-a]의 스칼라 서브쿼리를 아우터 조인으로 변경 EXPLAIN (ANALYZE,BUFFERS,COSTS OFF) SELECT /*+ Leading(((t1 t2) t3)) NestLoop(t1 t2) NestLoop(t1 t2 t3) */ t1.*, t2.base_cd_nm ,t3.base_cd_nm FROM startdbpg.tr_ord_big t1 LEFT OUTER JOIN startdbpg.cm_base_cd t2 ON (t2.base_cd_dv = 'ord_st' AND t2.base_cd = t1.ord_st) LEFT OUTER JOIN startdbpg.cm_base_cd t3 ON (t3.base_cd_dv = 'pay_tp' AND t3.base_cd = t1.pay_tp) WHERE t1.ord_dtm >= '2025-01-01'::date AND t1.ord_dtm < '2025-02-01'::date;
SQL
복사
-- [SQL-8-4-3-c]: [SQL-8-4-3-b]의 힌트를 제거하고 실행 EXPLAIN (ANALYZE,BUFFERS,COSTS OFF) SELECT t1.*, t2.base_cd_nm ,t3.base_cd_nm FROM startdbpg.tr_ord_big t1 LEFT OUTER JOIN startdbpg.cm_base_cd t2 ON (t2.base_cd_dv = 'ord_st' AND t2.base_cd = t1.ord_st) LEFT OUTER JOIN startdbpg.cm_base_cd t3 ON (t3.base_cd_dv = 'pay_tp' AND t3.base_cd = t1.pay_tp) WHERE t1.ord_dtm >= '2025-01-01'::date AND t1.ord_dtm < '2025-02-01'::date;
SQL
복사