Search

2015년 10월 27일 화요일

[Database] [MSSQL] 인덱스 확인, 생성, 제거

* 데이터베이스의 모든 인덱스 확인

select distinct ft.owner_name, ft.table_name, ft.index_name, ft.column_name
from (
 select s.name as owner_name, t.name as table_name, i.name as index_name, c.name as column_name
 from sys.tables t
  inner join sys.schemas s
  on t.schema_id = s.schema_id
  inner join sys.indexes i
  on i.object_id = t.object_id
  inner join sys.index_columns ic
  on ic.object_id = t.object_id
  inner join sys.columns c
  on c.object_id = t.object_id
   and ic.column_id = c.column_id
 where i.index_id > 0    
  and i.type in (1, 2) -- clustered & nonclustered only
  and i.is_primary_key = 0 -- do not include PK indexes
  and i.is_unique_constraint = 0 -- do not include UQ
  and i.is_disabled = 0
  and i.is_hypothetical = 0
  and ic.key_ordinal > 0
  --and t.name = 'A_Table'
 ) as ft 

* 혹은, A_Table에 있는 인덱스 확인

EXEC SP_HELPINDEX A_Table

* A_Table의 Column_01에 인덱스 생성. (인덱스명은 A_Table_INDEX_01로 할 경우)

CREATE INDEX A_Table_INDEX_01
ON A_Table(Column_01)


* A_Table의 Column_01은 항상 검색을 위해 필요하고, Column_02는 검색의 대상이 되지는 않지만, 값이 필요할 때가 있다.
* 이 경우에는 아래와 같이 INCLUDE 구문을 통해 성능을 증가시킬 수 있다.

CREATE INDEX A_Table_INDEX_01
ON A_Table(Column_01) INCLUDE (Column_02)

* A_Table의 Column_01에 있는 인덱스 A_Table_INDEX_01를 제거

DROP INDEX A_Table.A_Table_INDEX_01


댓글 1개: