我正在使用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时,为什么这会变慢?几个小时前,问题查询运行得很快,很好,但只有一次 - 现在我被超时所困扰。
答案 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