인덱스의 생성, 변경, 삭제
인덱스의 생성
- 인덱스의 자동 생성
- 인덱스의 직접 생성
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
INDEX index_name
ON <object> ( column [ ASC | DECS ][,...n] )
[ INCLUDE ( column_name [,...n] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option>[,...n])]
[ ON {
partition_scheme_name (column_name)
| filegroup_anme
| default
}
]
[ FILESTREAM_ON {
filestream_filegroup_name | partition_scheme_name | "NULL"
} ]
인덱스의 변경
ALTER INDEX { index_name| ALL }
ON <object>
{ REBUILD
[ [PARTITION = ALL]
[
WITH ( <rebuild_index_option> [ ,...n ] ) ]
| [ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_index_option>
[ ,...n ] )
]
]
]
| DISABLE
| REORGANIZE
[ PARTITION = partition_number]
[ WITH ( LOB_COMPACTION = { ON | OFF } ) ]
| SET ( <set_index_option> [ ,...n ] )
}
인덱스의 삭제
DROP INDEX 테이블이름.인덱스이름
인덱스를 생성해야 하는 경우와 그렇지 않은 경우
- 인덱스는 열 단위에 생성됨
- Where 절에서 사용되는 컬럼을 인덱스로 만듦
- Where 절에 사용되더라도 자주 사용해야 가치가 있음
- 데이터의 중복도가 높은 열은 익덱스를 만들어도 별 효용이 없음
- 외래 키가 사용되는 열에는 인덱스를 되도록 생성해 주는 것이 좋음
- JOIN에 자주 사용되는 열에는 인덱스를 생성해 주는 것이 좋음
- INSERT / UPDATE / DELETE가 얼마나 자주 일어나는지를 고려해야함
- 클러스터형 인덱스는 하나만 생성할 수 있음
- 클러스터형 인덱스가 테이블에 아예 없는 것이 좋은 경우도 있음
- 사용하지 않는 인덱스는 제거해야 함
- 계산 열에도 인덱스를 활용할 수 있음