이 글을 보신다면 부족하거나 잘못된 부분이 있으면 조언을 부탁드립니다. ^^
인덱스 생성에 사용되는 컬럼의 선택기준 1순위는 where 절에서 조건으로 사용되는 컬럼이며 값이 자주 변경되는 컬럼은 인덱스 정보를 갱신하는 과정이 추가적으로 발생하기 때문에 좋치 않다.
컬럼에 중복된 데이터가 많을 경우에도 인덱스를 사용함으로써 얻는 이점이 적다.
인덱스는 여러 컬럼을 선택하여 생성 할 수 있는데 컬럼의 순서에 따라 검색 속도에 영향을 준다.
where 절에서 조건으로 사용되는 컬럼은 인덱스 생성 시 앞쪽에 배치 하는 것이 좋다. 이유는 인덱스를 검색 할때 해당 조건값을 이용하여 검색의 범위를 줄 일수 있기 때문이다. 인덱스 생성은 일반적으로 B-tree 방식이 사용되며 다른 방식을 지정 할 수도 있다.
인덱스 생성에 사용되는 컬럼의 데이터가 문자열인 경우 대소문자를 구분 하지 않도록 지정 하면 속도 향상에 도움이 된다.
인덱스의 크기를 계산 : 정확한 공식은 아니지만 대략적으로 (컬럼의 데이터 타입 * 데이터의 건수)로 생각하면 좀 쉽게 이해 할 수 있다. 그래서 불필요한 인덱스는 생성 하지 않도록 한다.
인덱스 파티셔닝 : 대용량 데이터에 대한 인덱스 생성시 파티셔닝을 고려해 볼 수 있다. 파티셔닝의 경우 읽기 속도는 빨라지지만 쓰기 성능은 저하 될 수 있다. 예를 들어 파티션으로 구역이 정해지면 쓰기 작업을 할때 어느 구역에 쓸 것인지 찾는 과정으로 인해 오버헤드가 발생 한다.
인덱스 재구성 : 생성한 인덱스에 대하여 주기적으로 재구성(정렬)을 해주면 속도 향상에 도움이 된다. 재구성의 예시는 B-tree 구조로 저장된 인덱스 값을 정렬하는 것이다. 그리고 재구성 할때는 테이블에 락(Lock)이 걸리지 않도록 하는 옵션이 있는지 확인해 봐야 한다.
인덱스 통계정보 : DBMS 시스템에서는 인덱스의 통계 정보를 관리하는데 쿼리의 실행 계획을 짤때 통계 정보를 이용한다. 일반적으로 DBA가 성능 튜닝을 목적으로 조작 한다.