전체 글
-
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조인을 하고..
-
SQL BOOSTER - 조인의 내부적인 처리 방식DataBase/SQL 2024. 6. 12. 20:51
조인의 3가지 처리 방식 조인에는 이너 조인(조인 조건 참), 아우터 조인(기준 조건 무조건 참), 카테시안 조인 3가지가 있다. 오라클 내부적으로 조인이 처리되는 방식을 살펴보자 두 개의 데이터 집합을 연결하려면 조인 조건만 작성해주면 된다. SQL을 작성하는 입장에서는 매우 간단하다. 하지만, 내부는 복잡하며, 성능 개선 작업에 큰 도움이 된다. 조인의 내부적인 처리 방식은 아래 3가지가 존재한다. - NESTED LOOPS JOIN - MERGE JOIN- HASH JOIN 이너 조인을 NESTED LOOPS JOIN 방식 혹은 MERGE, HASH 방식으로 처리할 수도 있다. 아우터 조인도 마찬가지다 (카테시안은 HASH JOIN 불가능) 조인 처리 방식은 결과에는 영향이 없다 먼저 각자의..
-
SQL BOOSTER - 인덱스 설계 과정DataBase/SQL 2024. 6. 12. 19:49
SQL 하나를 위한 인덱스 설계는 어렵지 않다. 테이블 관련 SQL을 모두 검토하고 종합적으로 인덱스를 설계하는 것이 가장 중요하다. SQL 하나만 보고 인덱스를 생성해서는 안 된다. 실무에서 이는 어려운 일이지만, 어떻든 간에 인덱스는 전체 SQL을 보고 설계하는 것이 정석이다. 전체 SQL을 볼 수 없다면 가능한 많은 SQL을 살펴보자 인덱스 종합적 설계 과정 SQL별 접근 경로 조사테이블 별 접근 경로 정리종합적인 인덱스 설계핵심 테이블 및 핵심 SQL 집중 설계생성 및 모니터링 SQL 별 접근 경로 조사 이 과정을 진행하기 위해서는 개발 완료된 모든 SQL을 살펴봐야한다. SQL을 살펴보면서 사용된 접근 경로들을 엑셀로 정리해 놓는다. 각 항목을 살펴보면, 파일명 SQL ID를 관리해 해당..
-
SQL BOOSTER - 인덱스로 커버된 SQLDataBase/SQL 2024. 6. 12. 19:14
인덱스를 이용해 검색할 때 테이블 접근 횟수를 줄이는 것이 매우 중요하다. 이 횟수를 얼만큼 줄이느냐에 따라 SQL의 성능이 좋아진다. 더 나아가 테이블 접근 자체가 생략된다면 성능에 가장 좋다. SELECT /*+ GATHER_PLAN_STATISTICS INDEX(T1 X_T_ORD_BIG_$) */T1.ORD_ST, COUNT(*)FROM T_ORD_BIG T1WHERE T1.ORD_YMD LIKE '201703%'AND T1.CUS_ID = 'CUS_0075'GROUP BY T1.ORD_ST; 실행계획의 Buffers 수치를 보면, TABLE ACESS BY INDEX ROWID 단계에서 30.125로 급증했다. 그러므로 TABLE ACESS BY INDEX ROWID만 제거하면 SQL 성능을 ..
-
SQL BOOSTER - 복합인덱스DataBase/SQL 2024. 6. 12. 15:13
복합 인덱스 - 컬럼 순정과 순서 A,B,C 칼럼 순서의 복합 인덱스와 C,B,A 컬럼 순서의 복합 인덱스는 완전히 다른 인덱스다 복합 인덱스를 만들 때 가장 중요한 것은 인덱스를 구성하는 컬럼 순서다. 어떤 순서로 컬럼을 정하는 지에 따라 강력한 성능을 발휘할 수도 있으며, 도움이 안 될 수도 있다. 이때, 컬럼 순서를 정할 때 관심 있게 봐야하는 것은 WHERE절의 조건이다. 같다 조건이 사용된 컬럼을 복합 인덱스에 앞 부분에 두는 것이 기본 원칙이다. CREATE INDEX X_T_ROD_BIG_$ ON T_ORD_BIF(CUS_ID,ORD_YMD);SELECT /*+GATHER_PLAN_STATISTICS INDEX(T1 X_T_ORD_BIG_3) */T1.ORD_ST, COUNT(*)FRO..