我现在有一个零排的表,但一年会增长到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]
答案 0 :(得分:2)
您无法在PK上定义过滤索引。以下索引对您有用吗?
CREATE NONCLUSTERED INDEX MyIndex
ON biglog(logtext)
WHERE rowstate IS NOT NULL ;