SQL Server 2008에 새로운 기능으로서, filtered Index가 제공된다고 합니다.
filtered Index는 인덱스를 생성시 특정 조건에 대한 데이터만을 인덱스로 만드는 기능입니다.
오라클의 인덱스와 SQL Server의 인덱스의 가장 큰 차이 중에 하나인 NULL 데이터를 인덱스에 포함 여부에 대해서도
SQL Server도 filtered Index를 통해서 NOT NULL인 데이터 만을 인덱스로 만들 수 있고, 보다 확장하여 특정 조건에 대한 데이터만을 만들 수 있습니다.
대략은 구문은 아래와 같습니다.
CREATE INDEX 구문 뒤에 WHERE구문으로 조건을 줄 수 있습니다.(당연히 NONCLUSTERED 인덱스만 가능함.)
CREATE UNIQUE NONCLUSTERED INDEX UIX_FTI_TEST_B ON FTI_TEST(B)
WHERE C IS NOT NULL
이러한 filtered Index를 아래와 같은 경우에 유용할 것으로 생각됩니다.
.
- 특정 컬럼을 제외한 나머지 값에 대해서 고유성을 보장할 때
이전에는 특정 조건에 대한 데이터의 고유성을 보장하기 위해서 인덱스된 뷰를 통해 처리 하였으나, 보다 간편한 방법으로 구현이 가능
- NULL 데이터가 많고 운영 중에 NULL에 대한 데이터 엑세스가 없는 테이블
NULL 데이터가 인덱스로 포함되지 않아 인덱스 사이즈가 줄어 성능적 이점을 줌
- 특정 조건에 대한 covered query
필터 조건에 인덱스 키가 아닌 다른 컬럼에 대한 조건을 줄 수 있음
아직 filtered Index인덱스에 대해서 성능적인 부분까지 테스트를 해보지는 못해 대략의 내용만을 언급하였습니다.
다음 CTP인 CTP6 에는 해당 기능도 포함될 것으로 보이니, filtered Index의 관리 비용 및 성능에 대해서는 나중에..^^
송 혁, SQL Server MVP
sqler.pe.kr
nexondbteam.tistory.com