2012-05-24 4 views
1

저는 현재 행이 0 인 테이블을 보유하고 있지만 1 년에 4-5 백만 개까지 커질 것입니다. biglogid는 "COMB GUID"를 사용하여 테이블/색인을 조각화하지 않도록합니다. 행을 추가하면 rowstate의 값은 1이됩니다. 그러나 행이 필요하지 않으면 null로 설정됩니다 (연간 정리, 비즈니스 규칙을 제외하고는 아무것도 삭제할 수 없습니다). 이것은 결국 null이 아닌 열보다 null이 더 많음을 의미하므로 rowstate 열은 Sparse가됩니다.PK 인덱스/제약 조건의 SQL Server 필터링 된 인덱스?

"biglogid에서 logtext 선택 ...... ...... 및 rowstate가 null이 아님"테이블에서 선택하십시오. 활성화 된 경우에만 값을 가져옵니다. 이것이 테이블에 대해 실행되는 유일한 실제 쿼리 인 경우 PK를 필터링 된 인덱스로 만드는 데 가치가 있습니까? 그렇다면 TSQL 구문은 무엇입니까?

감사합니다.

CREATE TABLE biglog(
    biglogid [uniqueidentifier] NOT NULL, 
    logtext [varchar](400) NOT NULL, 
    rowstate [tinyint] SPARSE NULL, 
CONSTRAINT biglogpk PRIMARY KEY CLUSTERED 
(
    biglogid ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 85) ON [PRIMARY] 
) ON [PRIMARY] 
+3

필터링 된 색인을 만들 수 없습니다. –

답변

2

필터링 된 색인은 PK에 정의 할 수 없습니다. 다음 색인이 유용합니까?

CREATE NONCLUSTERED INDEX MyIndex 
    ON biglog(logtext) 
    WHERE rowstate IS NOT NULL ;