我想在 (Column1 = Column2) 条件下创建过滤索引:
CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
错误消息是:
关键字“with”附近的语法不正确
我想在 (Column1 = Column2) 条件下创建过滤索引:
CREATE NONCLUSTERED INDEX [IX_Document_IsBalanced]
ON [ACC].[Document] ([DocumentID] ASC)
WHERE SumCredit = SumDebit
ON [PRIMARY]
GO
错误消息是:
关键字“with”附近的语法不正确
文档在这个问题上相当混乱,但你不能真正创建一个在这个条件下过滤的索引(因为它不能用于过滤统计信息)。
文档说:
过滤谓词使用简单的比较逻辑
没有明确定义“简单”,但实际上“简单”意味着“可供过滤统计信息使用”。两者有相同的限制。
统计数据只能使用等式、范围和列表中的常量。这意味着您只能使用以下谓词:
column = const
column > const
column < const
column IN (const1, const1)
及其变体(BETWEEN
等),可能与AND
(甚至不是OR
)结合。
过滤索引是 SQL Server 2012 功能 - 这是MSDN 关于语法的文档
例如:
CREATE NONCLUSTERED INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL ;
GO