목차
<B>권호명 : < / B>2
추천사 ... 4
저자 서문 ... 6
Chapter 01 인덱스 원리와 활용
   01. 인덱스 구조 ... 16
      (1) 범위 스캔 ... 16
      (2) 인덱스 기본 구조 ... 17
      (3) 인덱스 탐색 ... 19
      (4) ROWID 포맷 ... 22
   02. 인덱스 기본 원리 ... 26
      (1) 인덱스 사용이 불가능하거나 범위 스캔이 불가능한 경우 ... 26
      (2) 인덱스 컬럼의 가공 ... 29
      (3) 묵시적 형변환 ... 33
   03. 다양한 인덱스 스캔 방식 ... 39
      (1) Index Range Scan ... 39
      (2) Index Full Scan ... 40
      (3) Index Unique Scan ... 43
      (4) Index Skip Scan ... 44
      (5) Index Fast Full Scan ... 50
      (6) Index Range Scan Descending ... 56
      (7) And-Equal, Index Combine, Index Join ... 58
   04. 테이블 Random 액세스 부하 ... 62
      (1) 인덱스 ROWID에 의한 테이블 액세스 ... 62
      (2) 인덱스 클러스터링 팩터 ... 67
      (3) 인덱스 손익분기점 ... 74
   05. 테이블 Random 액세스 최소화 튜닝 ... 79
      (1) 인덱스 컬럼 추가 ... 79
      (2) PK 인덱스에 컬럼 추가 ... 82
      (3) 컬럼 추가에 따른 클러스터링 팩터 변화 ... 84
      (4) 인덱스만 읽고 처리 ... 86
      (5) 버퍼 Pinning 효과 활용 ... 92
      (6) 수동으로 클러스터링 팩터 높이기 ... 94
   06. IOT, 클러스터 테이블 활용 ... 98
      (1) IOT란? ... 98
      (2) IOT, 언제 사용할 것인가? ... 100
      (3) Partitioned IOT ... 103
      (4) Overflow 영역 ... 105
      (5) Secondary 인덱스 ... 107
      (6) 인덱스 클러스터 테이블 ... 118
      (7) 해시 클러스터 테이블 ... 126
      (8) IOT와 클러스터 테이블을 동시에 적용한 튜닝 사례 ... 128
   07. 인덱스 스캔 효율 ... 131
      (1) 비교 연산자 종류와 컬럼 순서에 따른 인덱스 레코드의 군집성 ... 132
      (2) 인덱스 선행 컬럼이 등치(=) 조건이 아닐 때 발생하는 비효율 ... 134
      (3) BETWEEN 조건을 IN-List로 바꾸었을 때 인덱스 스캔 효율 ... 137
      (4) Index Skip Scan을 이용한 비효율 해소 ... 140
      (5) 범위검색 조건을 남용할 때 발생하는 비효율 ... 143
      (6) 같은 컬럼에 두 개의 범위검색 조건 사용 시 주의 사항 ... 147
      (7) Between과 Like 스캔 범위 비교 ... 153
      (8) 선분이력의 인덱스 스캔 효율 ... 158
      (9) Access Predicate와 Filter Predicate ... 168
      (10) Index Fragmentation ... 171
   08. 인덱스 설계 ... 180
      (1) 가장 중요한 두 가지 선택 기준 ... 180
      (2) 인덱스 설계는 공식이 아닌 전략과 선택의 문제 ... 180
      (3) 결합 인덱스 컬럼 순서 결정 시, 선택도 이슈 ... 191
      (4) 소트 오퍼레이션을 생략하기 위한 컬럼 추가 ... 196
      (5) 인덱스 설계도 작성 ... 198
   09. 비트맵 인덱스 ... 200
      (1) 비트맵 인덱스 기본 구조 ... 200
      (2) 비트맵 인덱스 활용 ... 205
      (3) RECORDS_PER_BLOCK ... 206
Chapter 02 조인 원리와 활용
   01. Nested Loops 조인 ... 210
      (1) 기본 메커니즘 ... 210
      (2) 힌트를 이용해 NL 조인을 제어하는 방법 ... 211
      (3) NL 조인 수행 과정 분석 ... 214
      (4) NL 조인의 특징 ... 217
      (5) NL 조인 튜닝 실습 ... 218
      (6) 테이블 Prefetch ... 222
      (7) 배치 I/O ... 225
      (8) 버퍼 Pinning 효과 ... 226
   02. 소트 머지 조인 ... 235
      (1) 기본 메커니즘 ... 235
      (2) 소트 머지 조인의 특징 ... 238
      (3) First 테이블에 소트 연산을 대체할 인덱스가 있을 때 ... 239
      (4) 조인할 First 집합이 이미 정렬돼 있을 때 ... 244
      (5) 조인 조건식이 등치(=) 조건이 아닐 때 ... 246
   03. 해시 조인 ... 249
      (1) 기본 메커니즘 ... 249
      (2) 힌트를 이용한 조인 순서 및 Build Input 조정 ... 251
      (3) 두 가지 해시 조인 알고리즘 ... 252
      (4) Build Input이 Hash Area를 초과할 때 처리 방식 ... 256
      (5) Build Input 해시 키 값에 중복이 많을 때 발생하는 비효율 ... 260
      (6) 해시 조인 사용기준 ... 264
   04. 조인 순서의 중요성 ... 266
   05. Outer 조인 ... 271
      (1) Outer NL 조인 ... 271
      (2) Outer 소트 머지 조인 ... 273
      (3) Outer 해시 조인 ... 274
      (4) Full Outer 조인 ... 278
   06. 스칼라 서브쿼리를 이용한 조인 ... 284
      (1) 스칼라 서브쿼리 ... 284
      (2) 스칼라 서브쿼리의 캐싱 효과 ... 285
      (3) 두 개 이상의 값을 리턴하고 싶을 때 ... 286
   07. 조인을 내포한 DML 튜닝 ... 288
      (1) 수정 가능 조인 뷰 활용 ... 288
      (2) Merge문 활용 ... 295
      (3) 다중 테이블 Insert 활용 ... 300
   08. 고급 조인 테크닉 ... 301
      (1) 누적 매출 구하기 ... 301
      (2) 선분이력 끊기 ... 303
      (3) 데이터 복제를 통한 소계 구하기 ... 306
      (4) 상호배타적 관계의 조인 ... 310
      (5) 최종 출력 건에 대해서만 조인하기 ... 312
      (6) 징검다리 테이블 조인을 이용한 튜닝 ... 319
      (7) 점이력 조회 ... 326
      (8) 선분이력 조인 ... 333
      (9) 선분이력 조인 튜닝 ... 337
      (10) 조인에 실패한 레코드 읽기 ... 354
Chapter 03 옵티마이저 원리
   01. 옵티마이저 ... 362
      (1) 옵티마이저란? ... 362
      (2) 규칙기반 옵티마이저 ... 363
      (3) 비용기반 옵티마이저 ... 364
      (4) 옵티마이저 모드 ... 367
   02. 옵티마이저 행동에 영향을 미치는 요소 ... 374
      (1) SQL과 연산자 형태 ... 374
      (2) 인덱스, IOT, 클러스터링, 파티셔닝, MV 등 옵티마이징 팩터 ... 375
      (3) 제약 설정 ... 375
      (4) 옵티마이저 힌트 ... 377
      (5) 통계정보 ... 379
      (6) 옵티마이저 관련 파라미터 ... 380
      (7) DBMS 버전과 종류 ... 381
   03. 옵티마이저의 한계 ... 384
      (1) 부족한 옵티마이징 팩터 ... 385
      (2) 부정확한 통계 ... 385
      (3) 히스토그램의 한계 ... 386
      (4) 바인드 변수 사용 시 균등분포 가정 ... 386
      (5) 결합 선택도 산정의 어려움 ... 387
      (6) 비현실적인 가정 ... 387
      (7) 규칙에 의존하는 CBO ... 388
      (8) 하드웨어 성능 특성 ... 391
   04. 통계정보 Ⅰ ... 392
      (1) 테이블 통계 ... 392
      (2) 인덱스 통계 ... 394
      (3) 컬럼 통계 ... 395
      (4) 시스템 통계 ... 397
   05. 카디널리티 ... 403
      (1) 선택도 ... 404
      (2) 카디널리티 ... 406
      (3) NULL 값을 포함할 때 ... 410
      (4) 조건절이 두 개 이상일 때 ... 412
      (5) 범위검색 조건일 때 ... 413
      (6) cardinality 힌트를 이용한 실행계획 제어 ... 415
   06. 히스토그램 ... 416
      (1) 히스토그램 유형 ... 416
      (2) 도수분포 히스토그램 ... 417
      (3) 높이균형 히스토그램 ... 420
      (4) 바인드 변수 사용 시 카디널리티 계산 ... 427
      (5) 결합 선택도 ... 429
   07. 비용 ... 433
      (1) I/O 비용 모델 ... 434
      (2) CPU 비용 모델 ... 439
   08. 통계정보 Ⅱ ... 442
      (1) 전략적인 통계수집 정책의 중요성 ... 442
      (2) DBMS_STATS ... 445
      (3) 컬럼 히스토그램 수집 ... 448
      (4) 데이터 샘플링 ... 449
      (5) 파티션 테이블 통계 수집 ... 450
      (6) 인덱스 통계 수집 ... 455
      (7) 캐싱된 커서 Invalidation ... 456
      (8) 자동 통계 수집 ... 457
      (9) Statistics Preference ... 459
Chapter 04 쿼리 변환
   01. 쿼리 변환이란? ... 462
   02. 서브쿼리 Unnesting ... 466
      (1) 서브쿼리의 분류 ... 466
      (2) 서브쿼리 Unnsting의 의미 ... 467
      (3) 서브쿼리 Unnesting의 이점 ... 469
      (4) 서브쿼리 Unnesting 기본 예시 ... 469
      (5) Unnesting된 쿼리의 조인 순서 조정 ... 472
      (6) 서브쿼리가 M쪽 집합이거나 Nonunique 인덱스일 때 ... 473
      (7) 필터 오퍼레이션과 세미조인의 캐싱 효과 ... 477
      (8) Anti 조인 ... 480
      (9) 집계 서브쿼리 제거 ... 482
      (10) Pushing 서브쿼리 ... 484
   03. 뷰 Merging ... 490
      (1) 뷰 Merging 이란? ... 490
      (2) 단순 뷰(Simple View) Merging ... 491
      (3) 복합 뷰(Complex View) Merging ... 493
      (4) 비용기반 쿼리 변환의 필요성 ... 495
      (5) Merging 되지 않은 뷰의 처리방식 ... 496
   04. 조건절 Pushing ... 499
      (1) 조건절 Pushing ... 501
      (2) 조건절 Pullup ... 505
      (3) 조인 조건 Pushdown ... 507
   05. 조건절 이행 ... 514
   06. 조인 제거 ... 524
   07. OR-Expansion ... 527
      (1) OR-Expansion 기본 ... 527
      (2) OR-Expansion 브랜치별 조인 순서 최적화 ... 529
      (3) 같은 컬럼에 대한 OR-Expansion ... 530
      (4) nvl/decode 조건식에 대한 OR-Expansion ... 533
   08. 공통 표현식 제거 ... 535
   09. Outer 조인을 Inner 조인으로 변환 ... 538
   10. 실체화 뷰 쿼리로 재작성 ... 540
   11. 집합 연산을 조인으로 변환 ... 544
   12. 기타 쿼리 변환 ... 546
      (1) 조인 컬럼에 IS NOT NULL 조건 추가 ... 546
      (2) 필터 조건 추가 ... 551
      (3) 조건절 비교 순서 ... 553
Chapter 05 소트 튜닝
   01. 소트 수행 원리 ... 572
      (1) 소트 수행 과정 ... 572
      (2) 소트 오퍼레이션 측정 ... 573
      (3) Sort Area ... 576
      (4) 소트 튜닝 요약 ... 580
   02. 소트를 발생시키는 오퍼레이션 ... 581
      (1) Sort Aggregate ... 581
      (2) Sort Order By ... 581
      (3) Sort Group By ... 582
      (4) Sort Unique ... 588
      (5) Sort Join ... 591
      (6) Window Sort ... 592
   03. 데이터 모델 측면에서의 검토 ... 592
   04. 소트가 발생하지 않도록 SQL 작성 ... 598
   05. 인덱스를 이용한 소트 연산 대체 ... 602
      (1) Sort Order By 대체 ... 602
      (2) Sort Group By 대체 ... 604
      (3) 인덱스가 소트 연산을 대체하지 못하는 경우 ... 605
   06. Sort Area를 적게 사용하도록 SQL 작성 ... 608
      (1) 소트를 완료하고 나서 데이터 가공하기 ... 608
      (2) Top-N 쿼리 ... 609
      (3) 분석함수에서의 Top-N 쿼리 ... 613
   07. Sort Area 크기 조정 ... 615
      (1) PGA 메모리 관리 방식의 선택 ... 616
      (2) 자동 PGA 메모리 관리 방식 하에서 크기 결정 공식 ... 616
      (3) 수동 PGA 메모리 관리 방식으로 변경 시 주의사항 ... 618
      (4) PGA_AGGREGATE_TARGET의 적정 크기 ... 619
      (5) Sort Area 할당 및 해제 ... 620
Chapter 06 파티셔닝
   01. 테이블 파티셔닝 ... 624
      (1) 파티션 기본 구조 ... 625
      (2) Range 파티셔닝 ... 629
      (3) 해시 파티셔닝 ... 630
      (4) 리스트 파티셔닝 ... 632
      (5) 결합 파티셔닝 ... 633
      (6) 11g에 추가된 파티션 유형 ... 636
   02. 파티션 Pruning ... 638
      (1) 기본 파티션 Pruning ... 638
      (2) 서브쿼리 Pruning ... 645
      (3) 조인 필터 Pruning ... 648
      (4) SQL 조건절 작성 시 주의사항 ... 654
   03. 인덱스 파티셔닝 ... 657
      (1) 인덱스 파티션 유형 ... 657
      (2) 로컬 파티션 인덱스 ... 659
      (3) 비파티션 인덱스 ... 660
      (4) 글로벌 파티션 인덱스 ... 660
      (5) Prefixed vs. Nonprefixed ... 662
      (6) 파티션 인덱스 구성 예시 ... 663
      (7) 글로벌 파티션 인덱스의 효용성 ... 668
      (8) 로컬 Nonprefixed 파티션 인덱스의 효용성 ... 669
      (9) 액세스 효율을 고려한 인덱스 파티셔닝 선택 기준 ... 673
      (10) 인덱스 파티셔닝 제약을 고려한 데이터베이스 설계 ... 676
Chapter 07 병렬 처리
   01. 기본 개념 ... 682
      (1) Query Coordinator와 병렬 서버 프로세스 ... 682
      (2) Intra - Operation Parallelism과 Inter - Operation Parallelism ... 684
      (3) 테이블 큐 ... 685
      (4) IN-OUT 오퍼레이션 ... 688
      (5) 데이터 재분배 ... 690
      (6) Granule ... 692
      (7) 병렬 처리 과정에서 발생하는 대기 이벤트 ... 694
   02. 병렬 Order By와 Group By ... 698
      (1) 병렬 Order By ... 698
      (2) 병렬 Group By ... 700
   03. 병렬 조인 ... 706
      (1) 둘 다 같은 기준으로 파티셔닝된 경우 - Full Partition Wise 조인 ... 707
      (2) 둘 중 하나만 파티셔닝된 경우 - Partial Partition Wise 조인 ... 709
      (3) 둘 다 파티셔닝되지 않은 경우 - 동적 파티셔닝 ... 710
      (4) 둘 다 파티셔닝되지 않은 경우 - Broadcast 방식 ... 715
   04. PQ_DISTRIBUTE 힌트 ... 717
      (1) pq_distribute 힌트의 용도 ... 717
      (2) 구문 이해하기 ... 719
      (3) 분배방식 지정 ... 720
      (4) pq_distribute 힌트를 이용한 튜닝 사례 ... 721
   05. 병렬 처리에 관한 기타 상식 ... 724
      (1) Direct Path Read ... 724
      (2) 병렬 DML ... 724
      (3) 병렬 인덱스 스캔 ... 726
      (4) 병렬 NL 조인 ... 727
      (5) 병렬 쿼리와 스칼라 서브쿼리 ... 731
      (6) 병렬 쿼리와 사용자 정의 함수 ... 734
      (7) 병렬 쿼리와 ROWNUM ... 740
      (8) 병렬 처리 시 주의사항 ... 742
찾아보기 ... 744
닫기