2012-05-24 68 views
1

我现在有一个零行的表,但一年会增长到4-5百万。 biglogid正在使用“COMB GUID”来防止表/索引分段。 添加行时,rowstate的值为1.但是,如果不需要这些行,它们将设置为空(除年度清理和业务规则外,不能删除任何内容)。因为这意味着最终会有比非空列多的空行,所以rowstate列变为Sparse。关于PK索引/约束的SQL Server筛选索引?

从表中选择“从Biglog中选择loglog,其中biglogid = ......且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

您不能使PK成为过滤后的索引。 –

回答

2

您无法在PK上定义过滤的索引。以下索引对您有用吗?

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