我有一个如下的查询
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不使用该索引
如何加快上述查询?
答案 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会自动执行此操作。