我在SQL Server中有一个简单的表,如下所示:
id | Date | Value
我在Date
上有一个聚集索引,id
上有非聚集索引。
该表包含超过十亿行。
我创建一个看起来像这样的简单查询:
select * from table
where id = x
and date >= date1 and date < date2
问题:当我使用例如date1 01 sept 2013
和date2 14 oct 2013
时,为什么只需要少于一次或最多3秒的时间来查找数据,但是如果我将date1更改为01 oct 2013
它需要超过50秒,如果我采取01 jan 2013
它只需要不到3秒钟?
我已经尝试了一切,我删除了缓存和数据库的SQL执行计划,仍然是一样的...... SQL Server忘了在这行上设置索引吗?我不知道该怎么做,似乎它是随机工作的。
答案 0 :(得分:1)
我会在两者(id,date)上都有一个索引。只是一个 - 或者不会让你受益。你需要在一个索引中。未集群...您已经通过ID获得的索引,只需将其构建为(ID,日期)