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?您应用了哪些更新?