홈 › 대용량·배치 › 03 / 8

인덱스 튜닝

커버링 인덱스, 컬럼 순서, 선택도, 인덱스가 오히려 느린 경우
섹션 6진행 0 / 8

6. 정리

인덱스 튜닝은 무엇을 만들지와 무엇을 지울지의 판단입니다. 인덱스로 찾은 뒤 테이블로 가는 왕복 비용을 줄이는 것이 첫째입니다.

커버링 인덱스는 조회 컬럼이 모두 인덱스에 있어 테이블 접근이 없는 인덱스입니다. Oracle 은 TABLE ACCESS BY INDEX ROWID 가, MySQL 은 Extra 에 Using index 가, MSSQL 은 Key Lookup 이 사라지는지로 확인합니다. MSSQL 은 INCLUDE 를 쓰고 InnoDB 는 PK 가 자동 포함됩니다.

복합 인덱스는 등호 컬럼을 앞에, 범위 컬럼을 뒤에 둡니다. 선택도가 낮은 컬럼은 단독 인덱스의 효과가 적어 복합 인덱스의 한 자리로 씁니다. 정렬 기준을 인덱스 순서에 맞추면 정렬 단계가 없어집니다.

넓은 범위(대략 절반 이상)는 랜덤 접근 때문에 전체 읽기가 나을 수 있습니다. 인덱스는 DML 마다 갱신되어 개수만큼 쓰기가 느려지므로 안 쓰는 인덱스는 사용 기록을 보고 숨긴 뒤 지웁니다.

H2 의 EXPLAIN 은 인덱스 선택 여부만 확인하는 용도로만 씁니다. 커버링과 넓은 범위의 전체 읽기 선택은 H2 로 재현되지 않습니다.

다음 레슨은 통계 정보와 힌트입니다. 옵티마이저가 계획을 세우는 근거인 통계를 갱신하는 법과 계획을 강제하는 힌트를 다룹니다.