인덱스를 아무렇게나 작성하면 아래와 같은 문제를 만나게 된다.
- DML 성능 저하
- 데이터베이스 사이즈 증가
- 데이터베이스 관리 및 운영 비용 상승
- 인덱스 분할
- DELETE 명령 실행시, 인덱스에서 레코드를 일일이 찾아 지워줘야 한다.
인덱스 분할이란, 인덱스는 정렬이 되어서 저장되는데 만약 블록에 더이상 저장공간이 없을때 실행하는 것이다. 예를 들어, 정렬 순서상 5번 리프 블록에 값을 입력해야 하는데, 그 블록이 꽉 차 있으면 새로운 블록을 5번과 6번 사이에 끼워넣고, 그 뒤에 리프노드들을 6번 블록으로 옮기는 것을 말한다.
- 조건절에 항상 사용하거나, 자주 사용하는 컬럼을 인덱스로 설정한다.
- '=' 조건을 자주 사용할 수록 선행 컬럼으로 설정한다.
- 수행 빈도
- 업무상 중요도
- 클러스터링 팩터
- 데이터량
- DML 부하
- 저장공간
- 인덱스 관리 비용
=
연산자를 사용한 조건절 컬럼 선정- order by 절에 기술한 컬럼 추가
=
연산자가 아닌 조건절 컬럼은 데이터 분포를 고려해서 추가한다. 즉 랜덤 i/o에 영향을 끼치는지 실행계획을 보고 고려해본다.