जब मैं इस तरह की विविधताओं को देखता हूं तो मेरा पहला विचार यह सुनिश्चित करना होता है कि आपने अपनी सभी तालिकाओं के आंकड़े पुन:उत्पन्न कर लिए हैं। ऐसा करने के लिए वेब पर कई स्क्रिप्ट हैं और इस बारे में बहुत सारी चर्चाएं हैं कि क्या बिल्ट-इन स्पॉक्स का उपयोग करना है, क्या फुलस्कैन करना है आदि। यहां एक त्वरित और गंदी स्क्रिप्ट है जिसके माध्यम से मैं तुलना करने से पहले चलाऊंगा।
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