자격증 & 문제풀이/SQLD 정리

[SQLD][과목 2] 제 3 장 : SQL 최적화 기본원리

YSY^ 2020. 8. 18. 16:34

제 3장 : SQL 최적화 기본원리

제 1절 : 옵티마이저와 실행계획

  1. 옵티마이저 : 다양한 실행방법 중 최적의 방법을 결정

    1) 분류

    ㄱ) 규칙기반 옵티마이저

    규칙1 : Single row by rowid → rowid으로 하나의 행을 엑세스

    규칙4 : Single row by unique or PK → 유일 인텍스로 하나의 행을 엑세스

    규칙8 : Composite index → 복합 칼럼 인덱스에 동등 연산자로 검색

    규칙9 : Single column index → 단일 칼럼 인덱스에 동등연산자로 검색

    규칙10 : Bounded range search on indexed columns → 인덱스가 형성되어 있는 칼럼에 양쪽범위를 한정하여 검색

    규칙11 : Unvounded range search on indexed columns → 인덱스가 형성되어있는 칼럼에 한쪽 범위를 한정하여 검색

    규칙15 : Full table scan → 전체테이블 액세스(where절 읽으면서)

    • 상위 규칙일 수록 우선순위 높음

    ㄴ) 비용기반 옵티마이저

    • 비용(예상되는 소요시간, 자원 사용량)이 가장 적은 실행계획을 선택하는 방식
    • 정확한 통계정보 유지 필수

 

2. 실행계획

 

 

제 2 절 : 인덱스 기본

cf) DML작업은 테이블과 인덱스를 모두 변경 → 느려질 수 있음

  1. 종류

    1) 트리기반 인덱스(오라클)

    2) 클러스터형 인덱스(SQL server)

 

2. TABLE 엑세스 방법

1) 전체테이블 스캔 : 테이블의 대부분인 data를 엑세스하는 것에 유리

2) 인덱스 스캔

ㄱ) 인덱스 유일스캔 : 유일 인덱스로 단일행에 엑세스

ㄴ) 인덱스 범위 스캔 :' 인덱스 다중행을 엑세스

ㄷ) 인덱스 역순 범위 스캔 : 위방법과 반대로 스캔

 

제 3 절 : 조인 수행 원리

  1. NL join
  • 두개의 테이블을 중첩된 반복문처럼 조인을 수행한다.
  • 반복문 외부(처음 테이블)에 있는 테이블을 선행테이블 또는 외부 테이블
  • 반복문 내부(두번째 테이블)에 있는 테이블을 후행테이블 또는 내부 테이블 이라고 부른다.

1) 선행 테이블에서 조건에 맞는 값을 찾음

2) 선행 테이블의 조인 키를 가지고 후행 테이블 조인 키 확인

3) 후행 테이블의 인덱스에 선행 테이블의 조인 키 존재 확인

4) 인덱스에서 추출한 레코드 식별자를 이용하여 후행 테이블 액세스

5 ~ 11) 앞의 작업을 반복 수행함

 

2. Sort Merge join

  • Sort Merge Join은 조인 칼럼을 기준으로 데이터를 정렬하여 조인한다.

    1) Sort Merge Join 특징

    • 넓은 범위의 데이터를 처리할 때 주로 이용.
    • 정렬 데이터가 많을 경우 성능이 떨어질 수 있다.(디스크 I/O로 인한 부하 발생)
    • 비동등 조인에 대해서도 조인이 가능
    • 인덱스를 사용하지 않아 인덱스가 존재하지 않을 경우에 사용할 수 있다.

1. 선행 테이블에서 조건에 맞는 행을 찾음.

2. 선행 테이블의 조인 키를 기준으로 정렬 작업 수행.

1 ~ 2번 작업을 반복 수행

3. 후행 테이블에서 조건에 맞는 행을 찾음.

4. 후행 테이블의 조인 키를 기준으로 정렬 작업 수행.

3 ~ 4번 작업을 반복 수행

5. 정렬된 결과를 이용하여 조인 수행 -> 결과값은 버퍼에 저장

 

3. Hash join

  • NL Join의 랜던 액세스 문제점과 Sort Merge Join의 정렬 작업의 부담을 해결 위한 대안
  • 칼럼 인덱스가 없을 경우 사용 가능
  • 동등 조인만 수행

     

1. 선행 테이블에서 조건에 만족하는 행을 찾음.

2. 선행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해쉬 테이블 생성

1 ~ 2번 작업을 선행 테이블의 조건 만큼 반복

3. 후행 테이블에서 조건에 만족하는 행을 찾음

4. 후행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해당 버킷을 찾음

5. 조인에 성공하면 추출버퍼에 저장

3 ~ 5번 작업을 후행 테이블의 조건 만큼 수행

 

 

728x90
반응형