是否有可能在SQL Server中使用索引解决此问题

时间:2016-05-26 13:38:17

标签: sql-server indexing

问题在于索引是否正确。我不能改变或添加它。

我可以做些更好的查询计划吗?

2列索引:pidDate

select仅适用于Date ...

deal非常大(> 1 000 000行)

create table deal
(
    Id  Int,           NOT NULL PRIMARY KEY NONCLUSTERED,
    pid Int,           NOT NULL,
    Date              smalldatetime NOT NULL
)

create clustered index pk ON deal (pid, Date)

select * 
from deal 
where Date between @d1 and @d2

2 个答案:

答案 0 :(得分:0)

我建议使用ID作为聚集索引,并在日期创建第二个索引,包括ID和PID(覆盖索引)。如果进行批量插入,则删除日期索引并在之后重新创建它以提高插入性能。

答案 1 :(得分:0)

我会在id上创建聚集索引,并像这样

创建一个非聚集索引
CREATE NONCLUSTERED INDEX noncluxidxdate ON deal (Date)
INCLUDE (id, pid);

这篇文章将帮助您理解 What do Clustered and Non clustered index actually mean?