2009-11-26 4 views
3

SQL Server 2008의 필터링 된 인덱스 기능에 대해 알고 싶습니다.SQL Server 2008 필터링 된 인덱스

데이터베이스 엔진은이 개념을 어떻게 처리합니까? 대형 테이블을 쿼리하는 동안 표준 인덱스보다 빠른 결과를 얻는 데 어떻게 도움이 될까요?

아무도 도와 줄 수 있습니까?

감사합니다.

답변

8

색인에 WHERE 절이 있습니다. 백만 행 테이블

내 실제 생활 계획 :

  • 나는 테이블의 컬럼에 인덱스를 필요하지만 값의 90 %는 NULL이다. 10 %가 아닌 null에 대한 인덱스가 필요하지만 인덱스는 90 % NULL로 비대화됩니다. 그래서 필터를 추가하고 공간을 절약합니다.

  • 고유 한 동일한 열 (NON-null 값에서만 고유 한 eq)을 고유하게하고 싶습니다. SQL Server 2008 이전에는 인덱싱 된 뷰 또는 코드를 사용해야했습니다. 이제는 "WHERE"를 통해 색인을 통해 고유 한 값을 적용 할 수 있습니다.

3

필터링 된 인덱스를 개념화하는 가장 쉬운 방법은 인덱스에 특정 값만 허용하는 제한 조건이있는 인덱스입니다.

쿼리가 제약 조건에 모두 포함되는 값을 요구하면 엔진은 다른 인덱스/원본 테이블로 되돌리는 대신 필터링 된 인덱스를 사용할 수 있음을 알고 있습니다. 제한 조건 외부의 값을 요구하면 필터링 된 인덱스는 사용되지 않습니다.

시스템을보다 빠르게 만드는 방법에 대해서는 색인을 매우 세분화 할 수 있으며 동일한 값에 해당하는 NC 색인보다 전체적으로 페이지를 적게 차지합니다. 이것은 기본적으로 I/O가 적어지고 속도가 빨라집니다. 필터링 된 인덱스는 제한 조건으로 인해 (이론적으로) 관심이있는 행만 포함하므로 필터링 된 인덱스를 찾는 인덱스 일지라도 인덱스에 페이지 캐시 히트 가능성이 더 커집니다.

데이터 배포 및 쿼리가 정의 된 사용 패턴을 따르지 않으면 이러한 작업을 수행하기가 어려울 수 있지만 관심이없는 많은 null 값이있는 시나리오에서 필터링 된 인덱스는 다음과 같이 될 수 있습니다. 예를 들어 null이 아닌 값만 포함하도록 설정하십시오.