목차
제1부 액세스 영향 요소의 이해 ... 1
제1장. 데이터 저장구조와 특징 ... 3
1.1. 테이블과 인덱스의 분리형 ... 4
1.1.1. 분리형 테이블의 구조 ... 5
1.1.2. 클러스터링 팩터(clustering factor) ... 11
1 1.3. 분리형 테이블의 액세스 영향요소 ... 16
1.1.3.1. 넓은 범위의 액세스 처리에 대한 대처방안 ... 16
1.1.3.2. 클러스터링 팩터 향상 전략 ... 22
1.2. 인덱스 일체형 테이블(Index-Organized Table) ... 24
1.2.1. 분리형과 일체형의 비교 ... 25
1.2.2. 일체형 테이블의 구조 및 특징 ... 26
1.2.3. 논리적 ROWID와 물리적 주소(Physical Guess) ... 28
1.2.4. 오버플로우 영역(Overflow Area) ... 31
1.2.5. 일체형 테이블의 생성 ... 33
1.3. 클러스터링 테이블 ... 35
1.3.1. 클러스터링의 테이블의 개념 ... 36
1.3.2. 단일테이블 클러스터링 ... 39
1.3.3. 다중테이블 클러스터링 ... 43
1.3.4. 클러스터링 테이블의 비용 ... 47
가) 입력(INSERT)시의 부하 ... 48
나) 수정(UPDATE)시의 부하 ... 50
다) 삭제(DELETE)시의 부하 ... 51
1.3.5. 해쉬(Hash) 클러스터링 ... 54
가) 해쉬 클러스터의 특징 ... 54
나) 해쉬 클러스터의 활용 범위 ... 55
다) 해쉬 클러스터의 정의 ... 56
라) 단일테이블 해쉬 클러스터(Single-table hash cluster) ... 58
제2장. 인덱스의 유형과 특징 ... 59
2.1. B-tree 인덱스 ... 60
2.1.1. B-Tree 인덱스의 구조 ... 60
2.1.2. B-Tree 인덱스의 조작(Operation) ... 64
가) 인덱스 생성(Creation) ... 64
나) 인덱스 블록의 분할(Split) ... 66
다) 데이터의 삭제 및 갱신 ... 68
라) 인덱스를 경유한 검색 ... 69
2.1.3. 리버스키 인덱스(Reverse key index) ... 71
2.2. 비트맵(Bitmap) 인덱스 ... 73
2.2.1. 비트맵 인덱스의 탄생배경 ... 73
2.2.2. 비트맵 인덱스의 구조와 특성 ... 75
2.2.3. 비트맵 인덱스의 액세스 ... 78
2.3. 함수기반 인덱스(FBI, Function-Based Index) ... 82
2.3.1. 함수기반 인덱스의 개념 및 구조 ... 82
2.3.2. 함수기반 인덱스의 제약사항 ... 84
2.3.3. 함수기반 인덱스의 활용 ... 88
가) 테이블 설계상의 문제를 해결 ... 88
나) 오류 데이터의 검색 문제를 해결 ... 93
다) 가공처리 결과의 검색 ... 96
라) 오브젝트 타입의 인덱스 검색 ... 97
마) 배타적 관계의 인덱스 검색 ... 99
제3장. SQL의 실행계획(Explain plan) ... 101
3.1. SQL과 옵티마이져 ... 102
3.1.1. 옵티마이져와 우리의 역할 ... 105
3.1.2. 옵티마이져의 형태 ... 110
3.1.2.1. 규칙기준 옵티마이져 ... 114
가) 규칙기준 옵티마이져의 단점 ... 115
나) 규칙기준 옵티마이져의 장점 ... 116
3.1.2.2. 비용기준 옵티마이져 ... 119
가) 비용기준 옵티마이져의 장점 ... 120
나) 비용기준 옵티마이져의 단점 ... 125
다) 옵티마이져의 발전 방향 ... 128
라) 통계정보 관리를 위한 제언 ... 128
3.1.2.3. 옵티마이져 목표(Goal)의 선택 ... 132
가) 옵티마이져 모드의 종류 ... 132
나) 옵티마이져 모드의 결정 기준 ... 134
다) 옵티마이져 모드와 관련된 파라메터 지정 ... 136
3.1.2.4. 실행계획의 고정화(Stability) ... 139
가) 아우트라인의 생성과 조정 ... 141
나) 아우트라인의 관찰 ... 143
다) 옵티마이져 업그레이드 시의 적용 ... 145
3.1.2.5. 옵티마이져의 한계 ... 148
3.1.3. 옵티마이져의 최적화 절차 ... 152
3.1.3.1. 질의 변환기 ... 154
3.1.3.2. 비용 산정기 ... 156
3.1.3.3. 실행계획 생성기 ... 159
3.1.4. 질의의 변환(Query Transforming) ... 162
3.1.4.1. 이행성 규칙(Transitivity principle) ... 165
3.1.4.2. 뷰병합(View Merging) ... 168
3.1.4.3. 사용자 정의 바인드 변수의 엿보기(Peeking) ... 177
3.1.5. 개발자의 역할 ... 179
3.2 실행계획의 유형 ... 183
3.2.1. 스캔(Scan)의 기본유형 ... 184
3.2.1.1. 전체테이블 스캔 ... 185
3.2.1.2. ROWID 스캔 ... 193
3.2.1.3. 인덱스 스캔 ... 194
가) 인덱스 유일 스캔(Index Unique Scan) ... 195
나) 인덱스 범위 스캔(Index Range Scan) ... 196
다) 인덱스 역순 범위 스캔(Index Range Scan Descending) ... 197
라) 인덱스 스킵 스캔(Index Skip Scan) ... 198
마) 인덱스 전체 스캔(Index Full Scan) ... 201
바) 인덱스 고속 전체 스캔(Index Fast Full Scans) ... 201
3.2.1.4. B-Tree 클러스터 액세스(Cluster access) ... 203
3.2.1.5. 해쉬 클러스터 액세스(Hash cluster access) ... 205
3.2.1.6. 표본 테이블 액세스(Sample table scan) ... 207
3.2.2. 데이터 연결을 위한 실행계획 ... 211
3.2.2.1. 내포 조인(Nested loops Join) ... 212
3.2.2.2. 정렬 병합 조인(Sort Merge Join) ... 217
3.2.2.3. 해쉬 조인(Hash Join) ... 219
3.2.2.4. 세미 조인(Semi Join) ... 221
3.2.2.5. 카티젼 조인(Cartesian Join) ... 224
3.2.2.6. 아우터 조인(Outer Join) ... 227
3.2.2.7. 인덱스 조인 ... 235
3.2.3. 연산 방식에 따른 실행계획 ... 239
3.2.3.1. IN-List 탐침(Iterator) 실행계획 ... 239
3.2.3.2. 연쇄(Concatenation) 실행계획 ... 242
3.2.3.3. 원격(Remote) 실행계획 ... 245
3.2.3.4. 정렬 처리(Sort Operation) 실행계획 ... 249
3.2.3.5. 집합 처리(Set Operations) 실행계획 ... 255
3.2.3.6. COUNT(STOPKEY) 실행계획 ... 259
3.2.4. 비트맵(Bitmap) 실행계획 ... 261
3.2.4.1. 조건 연산자별 비트맵 실행계획 ... 262
가) 동치(Equal) 비교 실행계획 ... 262
나) 범위(Range) 비교 실행계획 ... 263
다) AND 조건 실행계획 ... 264
라) OR 조건 실행계획 ... 265
마) 부등식(Not equal)비교 실행계획 ... 266
바) NULL 비교 실행계획 ... 267
3.2.4.2. 서브쿼리 실행계획 ... 269
3.2.4.3. B-Tree 인덱스와의 연합(Combine) 실행계획 ... 272
3.2.5. 기타 특수한 목적을 처리하는 실행계획 ... 274
3.2.5.1. 순환(Recursive) 전개 실행계획 ... 275
3.2.5.2. UPDATE 서브쿼리 실행계획 ... 283
3.2.5.3. 특이한 형태의 실행계획 ... 286
가) 서브쿼리 팩토링 실행계획 ... 287
나) 특이한 DELETE 문 서브쿼리 ... 289
다) 다중 테이블 입력(Multi-table Insert) 서브쿼리 ... 290
라) HAVING 절 서브쿼리 실행계획 ... 292
마) ROLLUP, CUBE, GROUPING SETS처리 실행계획 ... 293
바) MERGE 문 실행계획 ... 297
3.3. 실행계획의 제어 ... 299
3.3.1. 힌트(Hint)의 활용 기준 ... 300
3.3.2. 최적화 목표(Goal) 제어 힌트 ... 303
3.3.3. 조인 순서 조정을 위한 힌트 ... 304
3.3.4. 조인 방법 선택용 힌트 ... 305
3.3.5. 병렬처리 관련 힌트 ... 308
3.3.6. 액세스 수단 선택을 위한 힌트 ... 311
3.3.7. 쿼리형태 변형(Query Transformation)을 위한 힌트 ... 314
3.3.8. 기타 힌트 ... 318
제4장. 인덱스 수립 전략 ... 323
4.1. 인덱스의 선정 기준 ... 324
4.1.1. 테이블 형태별 적용 기준 ... 326
가) 적은 데이터를 가진 소형 테이블 ... 326
나) 주로 참조되는 역할을 하는 중대형 테이블 ... 328
다) 업무의 구체적인 행위를 관리하는 중대형 테이블 ... 330
라) 저장용 대형 테이블 ... 332
4.1.2. 분포도와 손익분기점 ... 333
4.1.3. 인덱스 머지와 결합 인덱스 비교 ... 336
4.1.4. 결합 인덱스의 특징 ... 340
가) 분포도와 결합순서의 상관관계 ... 341
나) 이퀄(=)이 결합순서에 미치는 영향 ... 343
다) IN연산자를 이용한 징검다리 효과 ... 346
라) 처리범위에 직접적인 영향을 주지 못하는 컬럼의 추가 기준 ... 350
4.1.5. 결합 인덱스의 컬럼순서 결정 기준 ... 352
4.1.6. 인덱스 선정 절차 ... 357
가) 테이블의 액세스 형태를 최대한으로 수집 ... 359
나) 인덱스 대상 컬럼의 선정 및 분포도 조사 ... 372
다) 특수한 액세스 형태에 대한 인덱스 선정 ... 376
라) 클러스터링 검토 ... 378
마) 결합 인덱스 구성 및 순서의 결정 ... 382
바) 시험생성 및 테스트 ... 384
사) 수정이 필요한 애플리케이션 조사 및 수정 ... 385
아) 일괄적용 ... 386
4.2. 클러스터링 형태의 결정 기준 ... 387
4.2.1. 포괄적인 클러스터링 ... 388
4.2.2. 부분적인 클러스터링 ... 390
4.2.3. 단일테이블 클러스터링 ... 392
4.2.4. 단위 클러스터의 크기 결정 ... 394
4.2.5. 클러스터 사용을 위한 조치 ... 399
제2부 액세스 최적화 방안 ... 401
제1장. 부분범위처리(Partial range scan) ... 403
1.1. 부분범위처리의 개념 ... 405
1.2. 부분범위처리의 적용원칙 ... 413
1.2.1. 부분범위 처리의 자격 ... 413
1.2.2. 옵티마이져 모드에 따른 부분범위처리 ... 417
1.3. 부분범위처리의 수행속도 향상원리 ... 419
1.4. 부분범위처리로의 유도 ... 425
1.4.1. 액세스 경로를 이용한 SORT의 대체 ... 426
1.4.2. 인덱스만 액세스하는 부분범위처리 ... 429
1.4.3. MIN, MAX의 처리 ... 432
1.4.4. FILTER형 부분범위처리 ... 439
1.4.5. ROWNUM의 활용 ... 442
1.4.6. 인라인뷰를 이용한 부분범위처리 ... 450
1.4.7. 저장형 함수를 이용한 부분범위처리 ... 454
1.4.8. 쿼리의 분리를 이용한 부분범위처리 ... 464
1.4.9. 웹 게시판에서의 부분범위처리 ... 469
가) 웹 게시판 부분범위처리 사례1 (NON-UNIQUE INDEX) ... 475
나) 웹 게시판 부분범위처리 사례2 (UNIQUE INDEX) ... 477
다) 웹 게시판 부분범위처리 사례3 (처음-이전-다음-끝) ... 479
라) 웹 게시판 부분범위처리 사례4 (SET 단위 처리) ... 481
마) 웹 게시판 부분범위처리 사례5 (계층구조의 처리) ... 485
제2장. 조인의 최적화 방안 ... 495
2.1. 조인과 반복연결(loop query)의 비교 ... 498
2.1.1. 전체범위 처리 방식에서의 비교 ... 501
2.1.2. 부분범위 처리 방식에서의 비교 ... 511
2.2. 연결고리 상태가 조인에 미치는 영향 ... 514
2.2.1. 연결고리 정상(正常) ... 517
2.2.2. 한쪽 연결고리 이상(異常) ... 524
2.2.3. 양쪽 연결고리 이상(異常) ... 529
2.3. 조인 종류별 특징 및 활용방안 ... 534
2.3.1. Nested Loops 조인 ... 536
2.3.1.1. Nested Loops 조인의 기본 개념 ... 537
가) Nested-Loops 조인의 특징 ... 539
나) Nested-Loops 조인의 적용기준 ... 540
2.3.1.2. Nested Loops 조인의 순서결정 ... 542
2.3.2. Sort Merge 조인 ... 554
가) Sort Merge 조인의 특징 ... 555
나) Sort Merge 조인의 적용기준 ... 557
2.3.3. Nested Loops 조인과 Sort Merge 조인의 비교 ... 559
2.3.4. 해쉬(Hash) 조인 ... 565
2.3.4.1. 인-메모리 해쉬조인 ... 571
2.3.4.2. 유예 해쉬조인 ... 575
2.3.5. 세미(Semi) 조인 ... 580
2.3.5.1. 세미조인의 개념 및 특징 ... 581
2.3.5.2. 세미조인의 실행계획 ... 585
가) Nested Loops형 세미조인 ... 585
나) Sort Merge형 세미조인 ... 591
다) 필터(Filter)형 세미조인 ... 593
라) 해쉬(Hash)형 세미조인 ... 597
마) 부정(Anti)형 세미조인 ... 599
2.3.6. 스타(Star) 조인 ... 606
2.3.7. 스타변형(Star Transformation) 조인 ... 617
2.3.8. 비트맵 조인 인덱스(Bitmap join index) ... 631
닫기