DB/SQL튜닝 16

업무에 바로 쓰는 SQL튜닝 입문 - 4교시(결합인덱스)

일단 인덱스 컬럼 선정하기 위해서는 최소 2가지는 기억하자! 1. 조건절에 자주 등장하는 컬럼! 2. 조인 조건에 자주 사용되는 컬럼!! 시작전 문제 1. 결합인덱스를 사용하기 위해선 인덱스를 구성하는 모든 컬럼이 WHERE 절에 기술되어야 한다. X : 결합인덱스의 첫 번째 컬럼을 제외한 나머지 컬럼들은 기술되지 않아도 된다. 2. 결합인덱스를 구성하는 컬럼의 순서대로 WHERE절에 컬럼에 대한 조건을 기술해야 한다. X : WHERE절에 기술하는 조건의 순서는 결합인덱스 칼럼의 순서와 상관없다. 결합인덱스 결합인덱스 컬럼을 선택할 때 고려사항 1. WHERE 절에서 AND 조건으로 자주 결합되어 사용되면서 각각의 분포도 보다 두 개 이상의 컬럼이 결함될 때 분포도가 좋아지는 컬럼들 2. 다른 테이블과..

DB/SQL튜닝 2022.09.25

업무에 바로 쓰는 SQL튜닝 입문 - 3교시(인덱스) - 1

하... 어렵다... 결론만 말하면 문제점은.. MAX와 MIN 두개만 있으면 되는데 ROWS가 28개나 된다는 점이 문제였다.. /*+ INDEX_ASC(IDX명) */, /*+ INDEX_DESC(IDX명) */... 그렇네.. 정렬이 되어있으니.. 그것의 ROWNUM=1만 뽑아서 합쳐버리면 되는 거였다.. 허허.. 빈칸은 DESC 부분이므로.. ASC와 똑같이하면 되겠지.. , 0 AS MIN_SQ, A.COURSE_SQ_NO AS MAX_SQ FROM EC_COURSE_SQ A WHERE A.COURSE_CODE = 1960 AND A.YEAR = '2002' AND ROWNUM = 1

DB/SQL튜닝 2022.09.25

업무에 바로 쓰는 SQL튜닝 입문 - 3교시(인덱스)

사전 문제 1. 인덱스 레인지 스캔(index range scan)의 경우, 한번의 i/o를 통해 여러개의 블록(block)을 동시에 처리할 수 있다 X : 인덱스 레인지 스캔은 한 번에 한 개의 블록을 처리한다 2. Balanced tree(B*Tree) 인덱스는 데이터를 정렬(sort)하여 저장한다 O : Balanced tree 인덱스의 데이터 저장 방식의 핵심은 정렬이다. 인덱스 인덱스의 필요성 어떨때 쓰는가? - 테이블의 전체 데이터 중에서 10~15% 이하의 데이터를 처리하는 경우에 효율적임. 그 이상의 경우 사용하지 않는 것이 더 나음 위의 이유~ 대부분 B*Tree 구조이기 때문! Root(기준)/Branch(중간)/Leaf(말단) Node로 구성됨 말 그대로 Tree 구조임! B*Tree..

DB/SQL튜닝 2022.09.25

업무에 바로 쓰는 SQL튜닝 입문 - 2교시(옵티마이저) - 2

RBO는 기본적으로 규칙에 우선순위에 의해 조건에 A = 1; 등의 조건이 있다면 해당 조건의 TABLE을 먼저 조인하게됨 따라서 만약 조인되는 테이블에 조건을 줄 때 A라는 테이블과 B라는 테이블이 조인을 하게 되면, 조건에 의해 강점이 있는 테이블(A 테이블에는 조건에 의해 1건 로우만 (PK) 출력된다면 A 테이블에 거는 것이 맞음)에 WHERE 조건을 넣는 것이 유리함. -- 위의 쿼리 조건을 수정한다 AND A.COURSE_CODE = 36 AND A.TASK_NO = 1

DB/SQL튜닝 2022.09.25

업무에 바로 쓰는 SQL튜닝 입문 - 2교시(옵티마이저)

옵티마이저 옵티마이저란 사용자가 실행한 SQL을 해석하고 데이터 추출을 위한 실행계획을 수립하는 Process로써 성능에 큰 영향을 미친다. 옵티마이저는 2가지로 분류됨. 1. RBO (Rule Based Optimizer) 규칙 기반 옵티마이저 - 기 수립된 특정 규칙(15개의 기본 규칙)의 Ranking을 매겨 순서대로 실행계획을 수립한다. - 과거 비용을 예측하는 기능의 신뢰도가 높지 않았을 때 사용한 기술이라고 할 수 있을 듯. - 힌트를 사용할 수 없음 - HASH JOIN을 사용할 수 없음. 2. CBO (Cost Based Optimizer) 비용 기반 옵티마이저 : 비용 = 시간 - 대상 Row들을 처리하는데 필요한 자원 사용을 최소화 해서 궁극적으로 데이터를 빨리 처리하는데 목적이 있음...

DB/SQL튜닝 2022.09.25

업무에 바로 쓰는 SQL튜닝 입문 - 1교시(실행계획)

1차시) [SQL 성능 분석하기] 실행계획 EXPLAIN PLAN - SQL에 대한 실행계획만 확인 - 데이터를 처리하지 않음. - 따라서 데이터베이스의 부하 X 튜닝 시 END 유저는 어떤 부하도 느껴선 안된다. STATEMENT_ID가 TEST1 으로 저장되며 실행 계획이 TEST1이란 이름으로 PLAN_TABLE에 저장됨 그래서 PLAN_TABLE을 조회하는 쿼리를 날려야됨. -> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'TEST1', 'ALL')); 데이터를 처리하지 않으므로 경과 시간 등 및 SORTING, IO관련 정보는 확인할 수 없음. SET AUTOTRACE SET AUTOTRACE ON; 처리 후 여러개의 SQL에 대한 실행계획을 ..

DB/SQL튜닝 2022.09.25