使用索引加速SQL Server 2008查询

时间:2014-04-29 09:24:47

标签: sql sql-server sql-server-2008 indexing

我有一个如下的查询

    Select top(10) *
    from myTable
    where CreateTime between '2014-2-3' and '2014-2-5' 
    and (Result is null or Result != 1) 

但是当我建立一个像下面的索引

    CREATE NONCLUSTERED INDEX [IX_Index] ON [dbo].[mytable] 
    (
[CreateTime] ASC,
    Result ASC
    )
    INCLUDE ( [ID])

([ID]是mytable的主键)

Sql server不使用该索引

如何加快上述查询?

2 个答案:

答案 0 :(得分:1)

如果要强制sql server使用特定索引,请尝试使用。

Select top(10) *
from myTable WITH (INDEX(IX_Index))
where CreateTime between '2014-2-3' and '2014-2-5' 
and (Result is null or Result != 1) 

答案 1 :(得分:0)

尝试简单地构建像

这样的索引
CREATE NONCLUSTERED INDEX [IX_Index] ON [dbo].[mytable] 
(
   [CreateTime]
)

由于您要对CreateTime进行过滤,因此只需在该列上构建覆盖索引即可。我不认为向索引添加Result将有助于查询。

此外,您不必在索引中包含主键列,SQL Server会自动执行此操作。