1

我试图弄清楚为什么在时间范围内选择行需要太多时间。

我有一个超过 500 万行的数据库表。

FooTimestamp 列上有一个非唯一、非聚集索引,它是 DateTimeOffset 类型。

当我尝试检索某个时间范围内的某些行时,需要 2 分钟以上。(当我再次运行它时,由于 MS-SQL Server 2008 的缓存功能,我猜它相对较快)

DECLARE @since datetimeoffset
DECLARE @before datetimeoffset

SET @since ='2013-03-20 00:00:00 +02:00'
SET @before ='2013-03-27 00:00:00 +02:00'

SELECT *
WHERE ([FooTimestamp] >= @since AND [FooTimestamp] <= @before) 

问题:当从具有数百万条记录的表中检索行时,我应该怎么做才能更快地获得查询结果?(我认为这样一个直截了当的查询需要 2 分钟太多了)

4

1 回答 1

0

如果你想优化这个特定的查询,我会在你的FooTimeStamp列上创建一个聚集索引。聚集索引将允许 SQL Server 使用索引提取所有行数据,而无需进行额外的查找。

这将要求您删除任何现有的聚集索引。如果需要,您可以将其作为非聚集索引添加回来。

与您的评论相反,聚集索引不必是唯一的。另请参阅聚簇索引是否必须是唯一的?

于 2013-04-10T14:05:40.260 回答