当我使用“where”时SQL Server查询冻结

时间:2010-01-10 02:21:58

标签: sql performance

我正在使用SQL Server 2005 Express,而且我遇到了一个奇怪的问题。我有一个名为“DailyPrice”的表,它有大约2400万条记录(由于你在这个帖子中的所有帮助,我能够制作这张表:SQL Server 2005 slows down as I keep adding rows

现在,我在VB.NET中运行一个不同的花哨功能,我需要根据一个股票代码(只有1)获得一个条目列表,我需要它们从最旧到最新组织。

此查询有效:

SELECT     Ticker, DateStamp, ClosePrice
FROM         DailyPrice
WHERE     (Ticker = 'DD')

这个要么是痛苦慢,要么是超时错误:

SELECT     Ticker, DateStamp, ClosePrice
FROM         DailyPrice 
WHERE     (Ticker = 'DD')
ORDER BY DateStamp

Ticker和DateStamp字段是我的主要索引,如果重要的话。 当我使用ORDER BY时,为什么这会变慢?几个小时前,问题查询运行得很快,很好,但只有一次 - 现在我被超时所困扰。

2 个答案:

答案 0 :(得分:1)

更新统计信息或重建索引。

这将重新索引整个数据库(如果数据库非常大,请注意!):

exec sp_msforeachtable "dbcc dbreindex('?')" 

答案 1 :(得分:0)

使用ORDER BY进行查询的时间总是比没有它的查询要长。这是因为SQL Server必须首先获取所有记录,然后在将结果返回给客户端之前对它们进行排序。

您可以通过添加与您在ORDER BY和WHERE子句中使用的字段匹配的索引来加速查询。但要小心,过多的索引会导致插入/更新速度变慢,并且SQL Server也可以决定使用错误的索引。

您可以将索引指定为FROM子句中表提示的一部分,但这将使您的查询依赖于该索引的存在。

最后在一个表中有24个以上的记录总是会引起问题。我建议你考虑对表进行分区,特别是如果你能找到一个字段,将数据分成几个相似大小的较小集合。 Look at SQL Server Books online for more info on partitioning