DataBase/SQL
-
SQL BOOSTER - HASH JOIN과 성능DataBase/SQL 2024. 6. 24. 14:37
1. 대량의 데이터 처리 NL 조인은 많은 양의 데이터를 조인 처리하기에는 적합하지 않다. 그러므로 많은 양의 데이터를 조인하려면 머지 조인을 사용해야한다. 하지만, 머지 조인도 데이터를 정렬해야 하는 부담이 있다.이와 같은 단점을 해결할 수 있는 것이 해시 조인이다. 해시 조인은 해시 함수를 사용하기 때문에 CPU와 메모리에 추가적인 부하가 발생한다. 하지만 머지 조인에 비하면 월등한 성능을 가지고 있다. 대용량 데이터 조인은 해시 조인이 필수다. SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_MERGE(T2) */T1.CUS_ID, MAX(T1.CUS_NM) CUS_NM, MAX(T1.CUS_GD) CUS_GD, COUNT(*) ORD_CNT, SUM(T2..
-
SQL BOOSTER - MERGE 조인과 성능DataBase/SQL 2024. 6. 24. 11:18
1. 대량의 데이터 처리 머지 조인은 대량의 데이터를 조인할 때 적합하다. NL 조인과의 비교를 통해 머지 조인이 과연 대량 데이터 조인에 유리한지 살펴보자 여기서는 머지 조인의 성능 테스트를 위해 T_ORD_BIG 테이블을 사용한다.M_CUS와 T_ORD_BIG테이블을 NL조인하는 SQL이다. SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T2) USE_NL(T1) FULL(T2) */ T1.CUS_ID, MAX(T1.CUS_NM) CUS_NM, MAX(T1.CUS_GD) CUS_GD, COUNT(*) ORD_CNT ,SUM(T2.ORD_AMT) ORD_AMT ,SUM(SUM(T2.ORD_AMT)) OVER() TTL_ORD_AMTFRO..
-
SQL BOOSTER - MERGEDataBase/SQL 2024. 6. 23. 16:10
1. MERGE란? 데이터 존재 여부에 따라 데이터를 INSERT하거나 UPDATE하는 경우가 많다. 이때 유용하게 사용할 수 있는 것이 MERGE이다. MERGE는 한 문장으로 INSERT와 UPDATE를 동시에 처리할 수 있다. 한 건의 데이터가 동시에 INSERT와 UPDATE되는 것은 아니다. 한 건의 데이터는 INSERT와 UPDATE 중 하나만 수행된다.MERGE 대상이 이미 존재하면 UPDATE, 대상이 존재하지 않으면 INSERT를 수행하는 방식이다. 예를 들어 고객 ID와 고객 정보를 외부에서 입력 변수로 받는다. 이때 같은 고객 ID가 이미 있으면, 고객 정보를 업데이트하고, 같은고객 ID가 없으면 신규 고객으로 등록한다. MERGE INTO M_CUS_CUD T1USING( S..
-
SQL BOOSTER - 서브쿼리 (WHERE)DataBase/SQL 2024. 6. 23. 15:33
1. WHERE절 단독 서브쿼리 서브쿼리는 WHERE 절에서도 단독으로 사용할 수 있다. 1.1 마지막 한 건 조회하기 SELECT * FROM T_ORD T1WHERE T1.ORD_SEQ = (SELECT MAX(A.ORD_SEQ) FROM T_ORD A); 위 SQL은 T_ORD 테이블을 두 번 사용하고 있다. SQL의 성능을 위해서는 테이블의 반복 출현을 줄여야한다. 따라서 위 SQL은 아래와 같이 사용하는 것이 성능 면에서 좀 더 유리할 수 있다. -- order by와 rownum 활용SELECT *FORM ( SELECT * FROM T_ORD T1 ORDER BY T1.ORD_SEQ DESC )AWHERE ROWNUM ORDER BY와 ROWNUM을 사용한 방법이다. ->..
-
SQL BOOSTER - 서브쿼리 (SELECT)DataBase/SQL 2024. 6. 23. 14:55
서브쿼리는 조인과 유사하면서도 조인보다 이해가 쉬운 장점이 있다. 서브쿼리를 익히기 전에, 서브쿼리는 성능이 좋지 못할 수 있다는 것을 알기 바란다.SQL의 실행계획이 특정된 방법으로 제약될 가능성이 있기 때문이다. 서브쿼리를 익힌 후에 가장 조심할 부분은 무분별한 서브쿼리 남발이다. 모든 조인을 서비쿼리로 해결하려고 해서는 절대 안된다. 성능에 영향을 주지 않는 범위에서 적절할게 사용해야 한다. > 서브쿼리는 사용 위치와 방법에 따라 다음 네 가지로 분류할 수 있다. - SELECT 절의 단독 서브쿼리- SELECT 절의 상관 서비쿼리- WHERE 절의 단독 서브쿼리- WHGER절의 상관 서브쿼리 > 메인 SQL과 상관없이 실핼 할 수 있으면 단독 서브쿼리, 메인 SQL에서 값을 받아 처리해야 하면..
-
SQL BOOSTER - OUTER JOINDataBase/SQL 2024. 6. 20. 18:45
1. OUTER JOIN이란 이너-조인은 조인 조건에 만족한 데이터만 결과에 나올 수 있다. 반면에 아우터 조인은 조인 조건에 만족하지 않은 데이터도 결과에 나온다.아우터-조인을 설명하기 위해 기준 데이터 집합과 탐조 데이터 집합이란 용어를 정의하자기준 데이터 집합: 아우터-조인의 기준이 되는 집합참조 데이터 집합: 아우터-조인의 참조가 되는 집합기준 데이터 집합은 조인 조건을 만족하지 않아도 모두 결과에 포함된다.아우터-조인을 사용하려면, 조인 조건 컬럼 한쪽에 +를 추가하면 된다. (+가 있는 쪽이 참조 데이터 집합이다.)--이너조인SELECT T1.CUS_ID, T1.CUS_NM, T2.CUS_ID,T2.EVL_LST_NO FROM M_CUS T1, T_ITM_EVL T2WHERE T1.CUS_I..
-
SQL BOOSTER - OUTER JOINDataBase/SQL 2024. 6. 20. 18:03
1. OUTER JOIN이란 이너-조인은 조인 조건에 만족한 데이터만 결과에 나올 수 있다. 반면에 아우터 조인은 조인 조건에 만족하지 않은 데이터도 결과에 나온다.아우터-조인을 설명하기 위해 기준 데이터 집합과 탐조 데이터 집합이란 용어를 정의하자기준 데이터 집합: 아우터-조인의 기준이 되는 집합참조 데이터 집합: 아우터-조인의 참조가 되는 집합기준 데이터 집합은 조인 조건을 만족하지 않아도 모두 결과에 포함된다.아우터-조인을 사용하려면, 조인 조건 컬럼 한쪽에 +를 추가하면 된다. (+가 있는 쪽이 참조 데이터 집합이다.)--이너조인SELECT T1.CUS_ID, T1.CUS_NM, T2.CUS_ID,T2.EVL_LST_NO FROM M_CUS T1, T_ITM_EVL T2WHERE T1.CUS_I..
-
SQL BOOSTER - NL조인과 성능DataBase/SQL 2024. 6. 12. 20:54
1. 성능 테스트를 위한 테이블 생성 2. 후행 집합에 필요한 인덱스 NL조인은 후행 테이블 쪽의 조인 조건 컬럼에 인덱스가 필수이다.!SELECT /*+ GATHER_PLAN_STATSTICS */T1.CUS_ID, MAX(T1.CUS_NM) CUS_NM, MAX(T1.CUS_GD) CUS_GD, COUNT(*) ORD_CNT, SUM(T2.ORD_QTY * T2.UNT_PRC)ORD_AMTFROM M_CUS T1, T_ORD_JOIN T2WHERE T1.CUS_ID T2.CUS_IDAND T1.CUS_ID = 'CUS_0009'AND T2.ORD_YMD = '20170218'GROUP BY T1.CUS_ID;특정 고객의 주문 일자를 조회하는 패턴이다.실행 계획을 살펴보면 다음과 같다.NL조인을 하고..