다음 문제를 풀어보세요.


17.68. 질의 최적화 기법에 대한 설명으로 틀린 것은?


1. 주기억장치보다 더 큰 용량의 데이터에 대하여 SQL의 order by 절을 수행하기 위해서는 정렬-합병 전략의 외부 정렬을 수행해야 한다.


2. 관계대수의 실렉트 연산을 수행하기 위해서는 데이터베이스 전체를 읽어들이는 파일 스캔 탐색이나 인덱스를 활용한 인덱스 스캔 탐색을 수행한다.


3. 두 릴레이션 R과 S에 대하여 조인 연산을 수행할 때, R과 S의 레코드들이 조인 애트리뷰트 A와 B값에 물리적으로 정렬되어 있으면 분할-해시 조인이 가장 효율적으로 구현될 수 있다.


4. 외부 조인은 중첩 루프 조인이나 단일 루프 조인 알고리즘 중 하나를 수정하여 구현할 수 있다.



내부정렬과 외부정렬



○ 내부정렬 (internal sorting)


→ 데이터가 적어서 메인 메모리 내에 모두 저장시켜 정렬 가능할 때 사용함

→ 레코드의 판독(read)및 기록(write)에 걸리는 시간이 문제가 되지 않음



○ 외부정렬 (external sorting)


→ 데이터가 많아서 메인 메모리의 용량을 초과하여 보조기억장치(디스크, 테이프)에 저장된 파일을 정렬할 때 사용함

 레코드 판독 및 기록에 걸리는 시간이 중요한 요소임

 정렬/합병 (sort/merge)




조인 방식



○ 중첩반복 (Nested Loops) 조인


프로그래밍의 중첩 반복문과 유사한 방식으로 조인을 수행한다.


FOR 선행 테이블 읽음 -> 외부 테이블

FOR 후행 테이블 읽음 -> 내부 테이블

(선행 테이블과 후행 테이블 조인)


→ 동작 방법

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

2. 선행 테이블의 조인 키 값을 가지고 후행 테이블에서 조인 수행

3. 선행 테이블의 조건을 만족하는 모든 행에 대해 1번 작업 반복 수행



○ 정렬병합 (Sort Merge) 조인


조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행한다. 


→ 동작 방법

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

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

3. 1~2번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

4. 후행 테이블에서 주어진 조건에 만족하는 행을 찾음

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

6. 3~4번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

7. 정렬된 결과를 이용하여 조인을 수행하며 조인에 성공하면 추출버퍼에 넣음


Sort Merge Join은 대량의 정렬작업이 필요로 하므로 Hash Join이 성능상 더 유리하다고 한다.



○ 해시(Hash) 조인


해싱기법을 이용하여 조인을 수행한다. 


→ 동작 방법

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

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

3. 1~2번 작업을 선행 테이블의 조건을 만족하는 모든 행에 대해 반복 수행

4. 후행 테이블에서 주어진 조건을 만족하는 행을 찾음

5. 후행 테이블의 조인키를 기준으로 해쉬 함수를 적용하여 해당 버킷을 찾음 (조인키를 이용하여 실제 조인될 데이터를 찾음)

6. 조인에 성공하면 추출버퍼에 넣음

7. 3~5번 작업을 후행 테이블의 조건을 만족하는 모든 행에 대해서 반복 수행


Hash Join은 작은 테이블을 선행 테이블로 사용하는 것이 성능 관점에서 좋다고 한다. 

Hash Join은 해싱 함수의 특성상 동등 조인에만 사용할 수 있다.

+ Recent posts