본문으로 건너뛰기

인덱스의 생성, 변경, 삭제

인덱스의 생성

  • 인덱스의 자동 생성
  • 인덱스의 직접 생성
    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가 얼마나 자주 일어나는지를 고려해야함
  • 클러스터형 인덱스는 하나만 생성할 수 있음
  • 클러스터형 인덱스가 테이블에 아예 없는 것이 좋은 경우도 있음
  • 사용하지 않는 인덱스는 제거해야 함
  • 계산 열에도 인덱스를 활용할 수 있음