4

SQL Server 2008 R2를 사용하고 있으며 고유하지 않은 nullable 필드에 클러스터되지 않은 인덱스를 추가하려고합니다. 또한 한 번 더 열이됩니다 내 인덱스 내 클러스터 된 인덱스에 액세스하는 것을 방지하기 위해 포함 : NULLs이 많이있을 것입니다 myBasicField의 실제 데이터에null 값을 검사하지 않도록 인덱스 검사를 줄이는 방법

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField); 

을 내가 증가 할 수있는 방법이 있는지 궁금 해서요 이 NULLs을 검색하지 않거나 NULL 값이 내 색인에 저장되지 않도록하십시오.

미리 감사드립니다.

+0

필터링 된 색인 답변을 좋아합니다. 이것은 단지 다른 것입니다. 그 데이터를 FK 관계가있는 별도의 테이블에 넣은 다음 null을 모두 제거 할 수 있습니다 (null 인 경우 FK 테이블에 행이없는 경우). 둘 다 클러스터 된 인덱스 인 경우 FK 조인에 대한 PK가 매우 빠릅니다. – Paparazzi

답변

6

, 당신은 필터링 된 인덱스를 사용할 수 있습니다.

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField) 
WHERE myBasicField IS NOT NULL; 

이 활용할 수있는 동일한 WHERE 절이 포함 된 모든 쿼리를하고, 지수는 많은 작은하고이 같은 NULL 값을 제외 할 경우, 따라서 더 나은 수행합니다 구문 것 - intro blog post here을 참조하십시오.

+0

+1 사용자 쿼리가 myBasicField가 NULL 인 경우 전체 테이블 스캔을 얻을 수 있습니까? – Paparazzi

+0

@Blam : 가능 - 쿼리에있을 수있는 다른 기준에 따라 달라질 수 있습니다. 'myBasicField'가 NULL이면, ** this ** index는 확실히 사용되지 않을 것입니다. –

+0

빠른 응답을 보내 주셔서 감사합니다. 그게 내가 필요로 한 것임 –

3

필터링 된 색인을 찾고 있습니다. 참고 : SQL Server 2008 및 최신으로

http://technet.microsoft.com/en-us/library/cc280372.aspx

+0

빠른 답변 주셔서 감사합니다 [나는 당신에게 투표 할 수있는 명성이 너무 적습니다, 미안합니다]. 내가 이것을 확인하고 알려 드리겠습니다 –