当我看到这样的变化时,我首先想到的是确保您重新生成了所有表格的统计信息。网上有很多脚本来做这件事,还有很多关于是否使用内置sprocs,是否进行全扫描等方面的讨论。这里有一个快速和肮脏的脚本,通过它我会比较之前运行。
CREATE PROCEDURE sp_UtilityUpdateStats AS
SET NOCOUNT ON
DECLARE @iCounter INT
DECLARE @iCounterMax INT
DECLARE @TableList TABLE
(
iTable INT IDENTITY(1,1) PRIMARY KEY,
szTableName VARCHAR(128)
)
INSERT @TableList (szTableName)
SELECT [name] FROM sysobjects
WHERE [type] = 'u'
ORDER BY [name] DESC
SET @iCounterMax = (SELECT MAX(iTable) FROM @TableList)
SET @iCounter = 0
DECLARE @szTableName VARCHAR(128)
RAISERROR(N'------STARTING sp_UtilityUpdateStats------', 10, 1) WITH LOG
WHILE @iCounter < @iCounterMax
BEGIN
SET @iCounter = @iCounter + 1
SELECT @szTableName = szTableName
FROM @TableList
WHERE iTable = @iCounter
RAISERROR(N'UPDATE STATISTICS YourDB.dbo.%s', 10, 1, @szTableName) WITH LOG
EXEC ('UPDATE STATISTICS YourDB.dbo.' + @szTableName)
END
RAISERROR(N'------FINISHING sp_UtilityUpdateStats------', 10, 1) WITH LOG
SET NOCOUNT OFF
GO
没有指标 - 谁能说?它可能是磁盘,它可能是索引,它可能是内存,它可能是腐败..等..你需要缩小到一个最小的案件和调查。目前人们无法提供帮助。但我建议你先重建所有指标,然后从那里着手调查。 –
我知道它缺乏指标。我想知道是否有人遇到过相同的问题,因为在同一台计算机上,我们与2个默认安装(2005/2012)有不同的结果。 –
当你提供一些在2012年较慢的查询时,可能有一个想法。 –