2025/01 4

SQL튜닝 입문 - NESTED LOOPS/SORT/MERGE/HASH

1. NESTED LOOPS JOIN- Driving Table: 옵티마이저가 결정 / outer table- Driven Table:Inner Table - 튜닝 포인트  1) 테이블 간 조인 횟수를 최소화 할 수 있도록 Driving Table을 선택 및 제어  2) Driven Table의 연결고리 칼럼에 대한 인덱스 구성2. NESTED LOOPS JOIN 장/단점1. 인덱스에 의한 랜덤 액세스에 기반하고 있어 대량의 데이터 처리 시 적합하지 않음2. Driving Table로는 테이블의 데이터가 적은 마스터 테이블이거나 where 절 조건으로 적절하게 row를 제어할 수 있어야 함.3. Driven Table에는 조인을 위한 적절한 인덱스가 있어야 함3. 조인 순서 제어 방법- 조인 순서 제어를..

프로그래밍 2025.01.19

SQL튜닝 입문 - INDEX 활용 불가능 케이스

1. 인덱스 사용하면 안되는 경우- 조건에 의한 처리 범위가 넓어짐으로써 분포도가 나빠지는 경우, 이 때 인덱스 스캔보다 FULL TABLE SCAN을 하는 것이 낫다 →FULL TABLE SCAN할 경우, 한 번의 I/O 때 마다 여러 개의 데이터 블록을 처리하기 때문에 I/O횟수가 감소함2. 인덱스 사용 불가능한 경우1) NOT 연산자 사용SELECT *FROM EMPWHERE EMPNO != '1234';SELECT *FROM EMPWHERE EMPNO '1234'; 2) IS NULL, IS NOT NULL 사용SELECT *FROM EMPWHERE EMPNO IS NULL; 3) 옵티마이저 취사 선택옵티마이저의 자의적 판단에 의해서 인덱스를 사용할 수도 있고, 사용하지 않을 수 있는 경우> 옵..

프로그래밍 2025.01.12

SQL튜닝 입문 - INDEX, 결합INDEX

1. 필요성- 일반적으로 테이블의 전체 데이터 중에서 10~15% 이하의 데이터를 처리하는 경우에 효율적2. B* TREE 구조- 가장 많이 사용되는 인덱스 구조, 데이터 저장 방식- ROOT/BRANCH/LEAF NODE 구성- BRANCH NODE: 조회하려는 값이 있는 LEAF 노드까지 도달하기 위해 비교/분기해야 될 값들이 저장됨LEAF NODE = 인덱스 칼럼의 값 + ROWID(저장위치정보) - ORDER BY에 의한 SORT를 피할 수 있음- MAX/MIN의 효율적 처리가 가능3. 인덱스 선정 절차1) 프로그램 개발에 이용된 모든 테이블에 대하여 Access Path 조사2) 인덱스 칼럼 선정 및 분포도 조사3) Critical Access Path 결정 및 우선순위 선정4) 인덱스 칼럼의 ..

프로그래밍 2025.01.12

SQL튜닝 입문 - 실행계획, 옵티마이저

1. 실행계획 정의사용자가 SQL을 실행하여 추출하려고 할 때, 옵티마이저가 수립하는 작업 절차- OPTIMZER: SQL 해석 -> 실행계획 수립 -> 실행 2. 실행계획 확인 방법1) EXPLAIN PLAN- SQL에 대한 실행계획만 확인 가능- 명령 사용 시 데이터 처리 X -> 이로 인한 부하가 없음, IO 관련 정보를 확인할 수 없음EXPLAIN PLANSET STATEMENT_ID = 'TEMP1' INTO PLAN_TABLEFOR/* SELECT 구문*/SELECT *FROM EMPWHERE DEPT_ID LIKE '%시스템'; - PLAN_TABLE에 저장된 결과를 확인해야 한다.SELECT *FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'TEMP1', '..

프로그래밍 2025.01.12