Min första tanke när jag ser sådana varianter är att se till att du har återskapat statistik för alla dina tabeller. Det finns många skript på webben för att göra detta och många diskussioner om huruvida man ska använda de inbyggda sprocs, om man ska göra fullscan etc. Här är ett snabbt och smutsigt skript som jag skulle köra innan jag gör jämförelser.
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