Basic Steps in Query Processing
- 1. parsing and translation
- sql문을 파싱해서 관계대수식으로 바꿈
- parser는 syntax를 체크하고, 테이블을 검증함
- 2. optimization
- 3. evaluation
- optimizer가 만들어준 처리전략 그대로 실행 후 결과를 얻음
Statistical Information for Cost Estimation
- n_r : table 속 레코드 수
- b_r: block 수
- l_r: 레코드 사이즈
- f_r: blocking factor. 블록 하나당 레코드 수
- V(A, r): r테이블의 A column 나열
- b_r = [n_r/f_r]
Basic Steps in Query Processing: Optimization
- 하나의 결과를 얻기 위해 여러 방법 존재
- 구체적인 처리 전략을 만들어야 함 --> 가장 비용이 낮은 것 선택
- 이 챕터에서는 다음을 다룸
- 질의처리 전략 비용
- 관계대수 연산 알고리즘
- 관계대수 연산 알고리즘을 합치는 방법
Measures of Query Cost
- cost
- response time: 질의가 나온 후부터 결과가 나오기 전까지의 경과시간
- resource consumption
- CPU, disk I/O, network communication 등 존재
- disk I/O만 고려할 것임
- 근데 질의 결과를 disk에 저장하는 비용은 제외함
- disk cost
- seek 수
- read 수
- write 수
- 계산식
- b*t_타우 + S*t_s
- t_타우: 입출력하는데 걸리는 시간
- t_s: seek time
- b: 블럭 수
- S: seek 수
- b*t_타우 + S*t_s
- b 만 고려 --> 추정
- 이미 block이 buffer에 존재하는 경우
- worst case: 항상 buffer에 없는 경우
Selection Operation
- File scan
- A1: linear search
- 조건 p를 충족하는 record 모두 select
- cost = b_r block transfer
- 고유식별자에 대해 selection 하는 경우는 겹치는게 없어서 찾으면 바로 멈출 수 있음
- cost = b_r/2 transfer
- 조건 p를 충족하는 record 모두 select
- index scan
- 조건 column이 search-key index
- A2 (clustering index, equality on key): 레코드 1개 return
- cost = h+1
- A3 (clustering index, equality on non-key): 레코드 여러 개 return
- cost = h + b
- A4 (secondary index, equality on key/non-key)
- 레코드 1개 return
- cost = h + 1
- 레코드 여러 개 return
- cost = h +n
- 레코드 1개 return
- range query
- linear file scan
- or
- A5 (clustering index, comparison)
- A>=v: v를 search-key로 해서 탐색, 테이블에서 뒤에 있는 거 쭉 순차적으로 스캔
- A<=v: 처음부터 v보다 큰 값이 나올때까지 테이블에서 scan --> index 사용 x
- A6 (non-clustering index, comparison)
- A>=v: v를 search-key로 해서 탐색, leaf node 그 뒤에 있는 거 쭉 순차적으로 스캔
- A<=v: 처음 leaf node부터 v보다 큰 값이 나올때까지 scan
External sort-merge
- run은 디스크에 있다
- pass: 전체 테이블을 처음부터 끝까지 쭉 읽어서 디스크에 쓰는 과정
- disk I/O
- b(2*[log_{M-1}(b/M)] + 1)
- M: buffer page 수
- M-1: merge 수
- b/M: 초기 run 수
- 1. 초기 run을 만들자!
- M개의 block read
- 내부정렬
- Disk로 wirte
- 2. Merge
- 각 run의 첫번째 block을 buffer로 읽음
- buffer가 가득차면 정렬할 순서대로 disk로 내보냄
- input buffer page로부터 내보낸 레코드 삭제
- buffer에 올라온 레코드들이 다 비면, run의 다음 block 가져옴
- 모든 input buffer page가 빌 때까지 반복
'학교 > db' 카테고리의 다른 글
[ch15] 중간고사 이후~ (0) | 2022.05.25 |
---|---|
[ch14] Indexing (0) | 2022.04.26 |
[ch13] Data Storage Structures (0) | 2022.04.26 |
[ch12] Physical Storage Systems (0) | 2022.04.26 |
댓글