2011-05-24 27 views
4

我有一个MSSQL2005数据库,其记录可以追溯到2004年,当前在一个特定表中只有不到1,000,000条记录。如果我运行的报告比较2009年的数据与2010年的数据,2008年比2009年,2009年比2009年或今年之前的任何年份的组合,然后结果在1-5秒内返回。当访问最近的记录时,SQL性能变慢

但是如果我运行包含2011年数据的报告,那么报告需要大约6分钟。

我检查了数据,它看起来与前几年相似,并与所有报告中使用的相同数据进行了交叉引用。

就好像数据库已经超出了一些限制;今年的数据已经变得分散,因此难以获取。我不是说这是事实,但可能是我所知道的。

任何人有任何建议吗?

Shaun。

更新:
由于张贴的问题,我发现DBCC DBREINDEX table_name的这似乎已经完成了帽子戏法。

+3

您还需要提供** WAY **关于此的更多信息。什么是表结构?你正在运行什么查询?任何分区?正如马丁所说,你还需要检查执行计划。 – JNK 2011-05-24 10:53:33

+0

也是相关表格上的两个执行计划和索引。 – EBarr 2011-05-24 10:56:25

+0

如果没有表模式,存储过程,执行计划和其他相关信息,将无法帮助您。 – 2011-05-24 10:56:43

回答

5

执行计划是什么样的?如果不同,则可能需要手动更新表上的统计信息,因为新插入的行在统计信息中可能不成比例地表示,因此可能会选择次优方案。

看到这个博客帖子这个问题Statistics, row estimations and the ascending date column

的说明,此外检查您的2011查询不遇到阻挡因并发插入或更新不影响对历史数据的查询。

+0

+1 - 我在想自己的并发性。我还怀疑它可能在日期分区,旧分区不活动或者索引不一致。 – JNK 2011-05-24 10:59:56

+1

几个月前我在工作中遇到了同样的问题,我们注意到为较新的行创建一个过滤的统计信息,优化程序更好地处理这些行。最初它是这样想的,因为直方图中没有数据只有一行会被返回,因此它没有执行预读和循环嵌套连接。 – JStead 2011-05-24 12:17:00