
인덱스 구성을 위한 기본 공식
인덱스 스캔 방식중 가장 정상적이고 일반적인 것은 INDEX RANGE SCAN 입니다. INDEX RANGE SCAN을 위해서는 인덱스 선두 칼럼이 조건절에 반드시 사용돼야만 합니다.
따라서 인덱스를 구성할 때, 첫 번째 기준은 조건절에 항상 사용되거나 적어도 자주 사용되는 칼럼을 선정하는 것입니다. 두 번째 기준은, 선정된 칼럼중 '=' 조건으로 자주 조회되는 칼럼을 선두에 두는 것입니다. 세 번째 기준은, 소트 오퍼레이션을 생략하도록 하기 위해 칼럼을 추가하는 것입니다. 인덱스는 항상 정렬 상태를 유지하므로 ORDERBY, GROUPBY를 위한 소트 연산을 생략할 수 있습니다. 따라서 조건절에 사용되지 않은 칼럼이라도 소트연산을 대체할 목적으로 인덱스 구성에 포함해 성능 개선을 도모할 수 있습니다.
인덱스를 이용해 소트 연산을 대체하려면, 인덱스 칼럼과 같은 순서로 누락없이 ORDYERBY 절에 기술해야합니다. 단, 인덱스 구성 칼럼이 조건절에서 = 연산자로 비교된다면 ORDER BY 절에서 누락되거나 인덱스와 다른 순서로 기술하더라도 상관없습니다. = 조건으로 비교된 칼럼과 order by 절에 사용된 칼럼 사이에 부등호 비교조건 컬럼이 끼어있으면 order by 오퍼레이션 생략이 발생하지 않습니다.
선택도를 고려한 인덱스 구성
인덱스 생성 여부를 결정할 때는 선택도가 충분히 낮은지가 중요한 판단 기준이 됩니다. 인덱스를 스캔하면서 액세스하는 레코드의 양이 일정 수준을 넘기면 FULL TABLE SCAN 보다 인덱스 스캔이 오히려 느려지기 때문입니다. 따라서 선택도가 높은 인덱스는 생성해봐야 효용가치가 없습니다.
결합 인덱스 칼럼 간 순서를 정할 때는 개별 칼럼의 선택도가 고려사항은 될 수 있지만, 어느 쪽이 유리한지는 상황에 따라 달라집니다. 개별 칼럼의 선택도 보다는 조건절에서 어떤 형태로 자주 사용되는지, 사용빈도는 어느 쪽이 높은지, 데이터를 빠르게 검색하는 데에 어느 쪽 효용성이 높은지 등이 중요한 판단기준이 됩니다.
인덱스 구성시 추가적인 고려사항
위 공식은 결합 인덱스를 구성할 때 일반적으로 통용될 수 있는 기본고려사항입니다. 하지만 인덱스 스캔의 효율성 외에도 고려해야 할 요소들이 훨씬 많습니다.
- 쿼리 수행 빈도
- 업무 상 중요도
- 클러스터링 팩터
- 데이터량
- DML 부하
- 저장공간
- 인덱스 관리비용
인덱스 설계는 공식이 아닌 전략과 선택의 문제로 시스템의 전체적인 관점에서 대안전략들을 수립하고, 그 중 최적을 선택할 수 있는 고도의 기술력과 경험이 요구됩니다. 개발 쿼리 성능을 높일 뿐만 아니라 생성되는 인덱스 개수를 최소화함으로써 DML 부하를 줄이는 것이 중요합니다.
'DB > SQL튜닝' 카테고리의 다른 글
| SQL튜닝 - 소트머지조인을 활용한 조인튜닝 (소트머지조인의 메커니즘, 특징, 이점) (0) | 2024.03.07 |
|---|---|
| SQL 튜닝이론 - NL 조인 (NESTED LOOP) 정리(특징, NL조인 인덱스 구성조건, 유도 힌트, 부하 포인트, PREFETCH, BATCH I/O) (0) | 2024.03.07 |
| SQL튜닝 인덱스 스캔 효율화 튜닝 방법 (0) | 2024.03.04 |
| SQL 튜닝 - 테이블 엑세스 최소화 방안 (INDEX ROWID, 클러스터링 팩터, 인덱스 손익분기점, 테이블 엑세스 최소화 튜닝, 배치 I/O) (0) | 2024.03.04 |
| SQL 튜닝을 위한 인덱스 기본원리 - 인덱스 튜닝 기초 (인덱스 가공 피하기, 묵시적 형변환 피하기) (1) | 2024.02.28 |