考虑一个包含4列
的表'订单'OrderNumber:DealerNumber:代码:时间
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
但这会改变查询的执行时间。 1秒到> 30分钟,所以这不是一个选择。
我听说过有关过滤索引的内容。在[时间]列上放置过滤索引是否明智?如果是这样会产生索引需要很长时间吗?
或者有更好的选择让第二个查询运行得非常快吗?
答案 0 :(得分:0)
您应该考虑此查询的索引是Orders(OrderNumber, DealerNumber, [Time])
。
但是,我不确定为什么第一个版本如此之快,第二个版本如此之慢。这有三种可能性:
time
上有一个索引,优化器因为使用该索引而感到困惑。我不认为过滤后的索引会对此查询特别有用。
顺便说一句,getdate()
在日期有一个时间组件。所以你可能想要:`[时间]> cast(getdate() - 180作为日期)。