我的数据库查询运行速度非常快,直到最近变为非常慢。除了正常的数据增长外,数据库中没有发生任何变化。
我注意到数据库统计信息“从未”更新过。
我是否可以通过简单的方法在整个数据库中更新这些统计信息,以便查看是否存在问题?
我正在使用SQL Server 2000 Sp4。
答案 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
不要忘记显然备份原始查询。请试一试,让我知道。