【发布时间】:2012-04-05 21:26:27
【问题描述】:
我正在优化我们系统上经常使用的查询。 where 子句类似于
WHERE J.Visibility > 11
and J.isactive='true'
and J.isdeleted='false'
AND (
CutOffDate > '2012-04-05 00:00:00.000'
OR J.CreatedOn > '2011-10-08 00:00:00.000'
)
AND J.Country = 'India'
AND J.City='Bangalore'
AND (J.Type > 0 AND J.Type < 230)
AND J.Category in (20)
已经存在具有 City、Type、Visibility、IsActive、IsDeleted 的 NC 索引(Index1)。我使用上述字段创建了一个新的 NC 索引,但也在开头添加了 CreatedOn、CutOffDate 和 Category。
因此,新索引 (Index2) 上的键是 City、Category、CreatedOn、CutOffDate、Type、Visibility 等。 CreatedOn 和 CutOffDate 均按降序排列。但是,当我运行查询时,实际的执行计划仍然对 Index1 而不是 Index2 进行了索引扫描。鉴于 DateTime 条件,我会认为 Index2 会是更好的选择,并且会导致索引搜索。但那并没有发生。
在调查为什么会发生这种情况时,我遇到了this MS article,现在我想知道是否需要像文章中提到的那样创建具有日期时间的索引。当我在 Google 上搜索时,我没有发现其他任何地方都提到过这种使用日期时间创建索引的技术,因此想知道其他人是怎么做的?
【问题讨论】:
标签: sql-server sql-server-2005 indexing