MS-SQL Server

SQL Server 2008 의 새로운 기능 - Filtered Index

송혁 - HyokSong 2008. 1. 14. 00:31

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를 아래와 같은 경우에 유용할 것으로 생각됩니다.

.

  1. 특정 컬럼을 제외한 나머지 값에 대해서 고유성을 보장할 때

이전에는 특정 조건에 대한 데이터의 고유성을 보장하기 위해서 인덱스된 뷰를 통해 처리 하였으나, 보다 간편한 방법으로 구현이 가능

  1. NULL 데이터가 많고 운영 중에 NULL에 대한 데이터 엑세스가 없는 테이블

NULL 데이터가 인덱스로 포함되지 않아 인덱스 사이즈가 줄어 성능적 이점을 줌

  1. 특정 조건에 대한 covered query

필터 조건에 인덱스 키가 아닌 다른 컬럼에 대한 조건을 줄 수 있음

 

아직 filtered Index인덱스에 대해서 성능적인 부분까지 테스트를 해보지는 못해 대략의 내용만을 언급하였습니다.

다음 CTP인 CTP6 에는 해당 기능도 포함될 것으로 보이니, filtered Index의 관리 비용 및 성능에 대해서는 나중에..^^

 

송 혁, SQL Server MVP

sqler.pe.kr

nexondbteam.tistory.com