什么是优化表的好方法? SQL server 2k8

时间:2014-12-30 14:00:10

标签: sql sql-server sql-server-2008 indexing

考虑一个包含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分钟,所以这不是一个选择。

我听说过有关过滤索引的内容。在[时间]列上放置过滤索引是否明智?如果是这样会产生索引需要很长时间吗?

或者有更好的选择让第二个查询运行得非常快吗?

1 个答案:

答案 0 :(得分:0)

您应该考虑此查询的索引是Orders(OrderNumber, DealerNumber, [Time])

但是,我不确定为什么第一个版本如此之快,第二个版本如此之慢。这有三种可能性:

  • 您正在测量返回第一条记录时的性能,第一条查询确实需要很长时间。
  • time上有一个索引,优化器因为使用该索引而感到困惑。
  • 其他一些程序锁定了表格。

我不认为过滤后的索引会对此查询特别有用。

顺便说一句,getdate()在日期有一个时间组件。所以你可能想要:`[时间]> cast(getdate() - 180作为日期)。