PK索引/约束的SQL Server过滤索引?

时间:2012-05-24 18:35:41

标签: sql-server-2008 indexing uniqueidentifier

我现在有一个零排的表,但一年会增长到4-5百万。 biglogid正在使用“COMB GUID”来防止表/索引碎片化。 添加行时,rowstate的值为1.但是,当不需要行时,它们将设置为null(除非通过年度清理,业务规则,否则不能删除任何内容)。由于这意味着最终将存在比非空列更多的空值,因此将rowstate列设为Sparse。

表格中的一个选择是“从biglog中选择loglog,其中biglogid = ......并且rowstate不为空”,只有在它处于活动状态时才获取值。如果这是针对表运行的唯一真实查询,那么将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]

1 个答案:

答案 0 :(得分:2)

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

CREATE NONCLUSTERED INDEX MyIndex
    ON biglog(logtext)
    WHERE rowstate IS NOT NULL ;
相关问题