我正在運行一個程序,第一次執行需要大約1分鐘的時間,但下一次它會減少到大約9-10秒。過了一段時間,大約需要1分鐘。與下次運行相比,sql查詢需要很長時間
我的程序正在處理具有6個非聚簇索引和1個聚簇索引的單個表,並且唯一ID列是具有1,218,833行的唯一標識數據類型。
你能指導我問題在哪裏/可能的性能改進是什麼?
在此先感謝。
這是程序。
PROCEDURE [dbo].[Proc] (
@HLevel NVARCHAR(100),
@HLevelValue INT,
@Date DATE,
@Numbers NVARCHAR(MAX)=NULL
)
AS
declare @LoopCount INT ,@DateLastYear DATE
DECLARE @Table1 TABLE (list of columns)
DECLARE @Table2 TABLE (list of columns)
-- LOOP FOR 12 MONTH DATA
SET @LoopCount=12
WHILE(@LoopCount>0)
BEGIN
SET @LoopCount= @LoopCount -1
-- LAST YEAR DATA
DECLARE @LastDate DATE;
SET @LastDate=DATEADD(D,-1, DATEADD(yy,-1, DATEADD(D,1,@Date)))
INSERT INTO @Table1
SELECT list of columns
FROM Table3 WHERE Date = @Date
AND
CASE
WHEN @HLevel='crieteria1' THEN col1
WHEN @HLevel='crieteria2' THEN col2
WHEN @HLevel='crieteria3' THEN col3
END [email protected]
INSERT INTO @Table2
SELECT list of columns
FROM table4
WHERE Date= @LastDate
AND (@Numbers IS NULL OR columnNumber IN (SELECT * FROM dbo.ConvertNumbersToTable(@Numbers)))
INSERT INTO @Table1
SELECT list of columns
FROM @Table2 Prf2 WHERE Prf2.col1 IN (SELECT col2 FROM @Table1) AND Year(Date) = Year(@Date)
SET @Date = DATEADD(D,-1,DATEADD(m,-1, DATEADD(D,1,@Date)));
END
SELECT list of columns FROM @Table1
您是否嘗試過使用執行計劃給你什麼是與查詢發生的事情的想法?而且,它第一次運行時,會將執行計劃緩存在內存中,以便下次執行更快。 – 2010-10-29 07:54:48
請顯示一些代碼,以便我們可以看看你在做什麼。 – 2010-10-29 07:57:36
有沒有什麼方法可以手動添加執行計劃來加速並永久存在。 – Chingi 2010-11-03 08:44:23