Sql server 2008 SQL Server 2008-筛选索引

Sql server 2008 SQL Server 2008-筛选索引,sql-server-2008,Sql Server 2008,假设我有一个定义如下的索引: CREATE NONCLUSTERED INDEX [IX_Marker] ON [dbo].[Marker] ( [Run] ASC, [EquipmentID] ASC, [ReadTime] DESC ) INCLUDE ( [Sequence]) WHERE ([ReadTime]>'07/01/2011') 在什么情况下,SQL Server计划生成器将选择此索引?例如,假设我有以下查询: Select * From M

假设我有一个定义如下的索引:

CREATE NONCLUSTERED INDEX [IX_Marker] ON [dbo].[Marker] 
(
    [Run] ASC,
    [EquipmentID] ASC,
    [ReadTime] DESC
)
INCLUDE ( [Sequence]) 
WHERE ([ReadTime]>'07/01/2011')
在什么情况下,SQL Server计划生成器将选择此索引?例如,假设我有以下查询:

Select * From Marker Where ReadTime > '3/1/2011'

我想在这种情况下不会使用索引?但是如果我将Where子句更改为'8/1/2011',它将被使用。

当索引包含查询所需记录的超集时,将使用该索引,而不是子集


基本上,如果引擎知道或怀疑索引排除了结果集中可能需要的记录,它将不会使用该索引。

另外,请注意,只有当where子句具有硬编码的日期值时,才会使用过滤索引。如果在where子句中使用参数(通过参数化查询或SP),则不会使用过滤索引

因此,如果你有:

declare @d date = '8/1/2011'
Select * From Marker Where ReadTime > @d

在上述情况下,将不使用过滤后的索引。

不正确。在Where子句之后添加选项(重新编译),它将被使用。你真的确定&你试过这个吗?我用各种过滤索引尝试了这个方法,但从未奏效。您使用的是什么版本的sql server?您应用了哪些更新?