1

我在 SQL Server 中有一个简单的表,如下所示:

id | Date | Value

我有一个聚集索引Date,非聚集索引id

该表包含超过 10 亿行。

我创建了一个看起来像这样的简单查询:

select * from table 
where id = x 
and date >= date1 and date < date2

01 sept 2013问题:为什么当我使用例如 date1和 date2时查找数据只需要不到一秒或最多 3 秒14 oct 2013,但是如果我将 date1 更改为01 oct 2013它需要超过 50 秒,如果我01 jan 2013再次使用它只需要不到 3 秒?

我什么都试过了,我把数据库的缓存和SQL执行计划都删了,还是一样……SQL Server忘了给这行设置索引了吗?我不知道该怎么办,它似乎在随机工作。

4

1 回答 1

1

我会在两个(id,date)上都有一个索引。只是一个非此即彼的选择,不会使您受益。你需要在一个索引中。未聚集...您已经按 ID 拥有的索引,只需将其构建为 (ID, Date)

于 2013-10-15T15:23:48.263 回答