6. 정리
인덱스 튜닝은 무엇을 만들지와 무엇을 지울지의 판단입니다. 인덱스로 찾은 뒤 테이블로 가는 왕복 비용을 줄이는 것이 첫째입니다.
커버링 인덱스는 조회 컬럼이 모두 인덱스에 있어 테이블 접근이 없는 인덱스입니다. Oracle 은 TABLE ACCESS BY INDEX ROWID 가, MySQL 은 Extra 에 Using index 가, MSSQL 은 Key Lookup 이 사라지는지로 확인합니다. MSSQL 은 INCLUDE 를 쓰고 InnoDB 는 PK 가 자동 포함됩니다.
복합 인덱스는 등호 컬럼을 앞에, 범위 컬럼을 뒤에 둡니다. 선택도가 낮은 컬럼은 단독 인덱스의 효과가 적어 복합 인덱스의 한 자리로 씁니다. 정렬 기준을 인덱스 순서에 맞추면 정렬 단계가 없어집니다.
넓은 범위(대략 절반 이상)는 랜덤 접근 때문에 전체 읽기가 나을 수 있습니다. 인덱스는 DML 마다 갱신되어 개수만큼 쓰기가 느려지므로 안 쓰는 인덱스는 사용 기록을 보고 숨긴 뒤 지웁니다.
H2 의 EXPLAIN 은 인덱스 선택 여부만 확인하는 용도로만 씁니다. 커버링과 넓은 범위의 전체 읽기 선택은 H2 로 재현되지 않습니다.
다음 레슨은 통계 정보와 힌트입니다. 옵티마이저가 계획을 세우는 근거인 통계를 갱신하는 법과 계획을 강제하는 힌트를 다룹니다.