【发布时间】:2014-12-30 14:00:09
【问题描述】:
考虑一个有 4 列的“订单”表
OrderNumber : DealerNumber : Code : Time
OrderNumber、DealerNumber 和 Code 上有一个非聚集索引。时间没了
所以
select * from Orders where OrderNumber = 10 and DealerNumber = 20
非常快。 但是表越大,检索到的重复项就越多。可以找到 2010 年的订单和 2014 年的订单。 所以我把查询改成
select *
from Orders
where OrderNumber = 10 and DealerNumber = 20 and [Time] > getdate() - 180
但这会将查询的执行时间从 30 分钟,所以这不是一个选项。
我听说过一些关于过滤索引的事情。在 [Time] 列上放置过滤索引是否明智?如果是这样,生成索引会需要很长时间吗?
或者有更好的选择让第二个查询运行得非常快?
【问题讨论】:
-
为什么不直接将
Time包含到现有索引中?
标签: sql sql-server sql-server-2008 indexing