创建筛选索引

时间:2012-05-28 06:44:21

标签: sql sql-server-2008

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

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

错误消息是:

  

关键字'with'

附近的语法不正确

2 个答案:

答案 0 :(得分:7)

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

文档说:

  

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

没有明确定义“简单”,但实际上“简单”意味着“可用于过滤的统计数据”。两者有相同的局限性。

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

column = const
column > const
column < const
column IN (const1, const1)

及其变体(BETWEEN等),可能与AND(甚至不是OR)相结合。

答案 1 :(得分:-5)

过滤的索引是SQL Server 2012的功能 - 这里是来自MSDN的documentation语法

例如:

CREATE NONCLUSTERED INDEX FIBillOfMaterialsWithEndDate
    ON Production.BillOfMaterials (ComponentID, StartDate)
    WHERE EndDate IS NOT NULL ;
GO