1

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

从表中选择将是“从 biglog 中选择 logtext,其中 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]
4

1 回答 1

2

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

CREATE NONCLUSTERED INDEX MyIndex
    ON biglog(logtext)
    WHERE rowstate IS NOT NULL ;
于 2012-05-24T18:54:18.473 回答