创建筛选索引

meh*_*tfi 1 sql sql-server-2008

我想在(Column1 = Column2)条件上创建一个过滤索引:

CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

错误消息是:

关键字'with'附近的语法不正确

Qua*_*noi 7

文档在这个问题上相当混乱,但你不能真正创建一个在这种条件下过滤的索引(因为它不能用于过滤统计信息).

文档说:

过滤谓词使用简单的比较逻辑

没有明确定义"简单",但事实上"简单"意味着"可用于过滤统计".两者有相同的局限性.

统计信息只能使用等式,范围和列表中的常量.这意味着您只能使用以下谓词:

column = const
column > const
column < const
column IN (const1, const1)
Run Code Online (Sandbox Code Playgroud)

和他们的变化(BETWEEN等),可能与AND(甚至OR)相结合.