SQL Server 2000 - 我的查询突然运行缓慢

时间:2009-06-21 22:46:20

标签: sql-server sql-server-2000

我的数据库查询运行速度非常快,直到最近变为非常慢。除了正常的数据增长外,数据库中没有发生任何变化。

我注意到数据库统计信息“从未”更新过。

我是否可以通过简单的方法在整个数据库中更新这些统计信息,以便查看是否存在问题?

我正在使用SQL Server 2000 Sp4。

5 个答案:

答案 0 :(得分:2)

您可以使用此

CREATE PROC usp_UPDATE_STATISTICS
(@dbName sysname, @sample int)
AS

SET NOCOUNT ON

DECLARE @SQL nvarchar(4000)
DECLARE @ID int
DECLARE @TableName sysname
DECLARE @RowCnt int

CREATE TABLE ##Tables
(
 TableID INT IDENTITY(1, 1) NOT NULL, 
 TableName SYSNAME NOT NULL
)

SET @SQL = ''
SET @SQL = @SQL + 'INSERT INTO ##Tables (TableName) '
SET @SQL = @SQL + 'SELECT [name] '
SET @SQL = @SQL + 'FROM ' + @dbName + '.dbo.sysobjects ' 
SET @SQL = @SQL + 'WHERE xtype = ''U'' AND [name] <> ''dtproperties'''

EXEC sp_executesql @statement = @SQL

SELECT TOP 1 @ID = TableID, @TableName = TableName
FROM ##Tables
ORDER BY TableID

SET @RowCnt = @@ROWCOUNT

WHILE @RowCnt <> 0
BEGIN

 SET @SQL = 'UPDATE STATISTICS ' + @dbname + '.dbo.[' + @TableName + '] WITH SAMPLE ' + CONVERT(varchar(3), @sample) + ' PERCENT'

 EXEC sp_executesql @statement = @SQL

 SELECT TOP 1 @ID = TableID, @TableName = TableName
 FROM ##Tables
 WHERE TableID > @ID
 ORDER BY TableID

 SET @RowCnt = @@ROWCOUNT

END

DROP TABLE ##Tables


GO

这将更新数据库中所有表的统计信息。您还应该查看索引并重建/碎片整理为nexessary

拉​​吉

答案 1 :(得分:0)

尝试here

这应该加快你的指数和密钥分配。重新分析表统计信息可优化SQL Server对查询的索引选择,尤其是对于大型数据集

答案 2 :(得分:0)

绝对让自己成为每周任务,自动运行以更新数据库的统计信息。

答案 3 :(得分:0)

正常数据增长足以证明几乎任何未经优化的查询都会放缓。

在数据量增长之前,相关数据库大小的可伸缩性问题不会出现。

发布您的查询+粗略数据量,我们会帮助您了解它是什么。

答案 4 :(得分:-1)

我们遇到了与MSSQL 2005非常相似的问题,并突然慢慢运行查询。

以下是我们如何解决它:我们为查询中的每个select语句添加了(nolock)。例如:

select count(*) from SalesHistory with(nolock)

请注意,还应将nolock添加到嵌套的select语句以及连接中。这篇文章提供了有关使用nolock时性能如何提高的更多详细信息。 http://www.mollerus.net/tom/blog/2008/03/using_mssqls_nolock_for_faster_queries.html

不要忘记显然备份原始查询。请试一试,让我知道。