की तुलना में काफी लंबा समय लेता है। मैं एक प्रक्रिया चला रहा हूं जो पहली बार निष्पादन के लिए लगभग 1 मिनट लेता है लेकिन अगली बार यह लगभग 9-10 सेकेंड तक कम हो जाता है। और कुछ समय बाद इसे लगभग 1 मिनट लगते हैं।एसक्यूएल क्वेरी अगले रन
मेरी प्रक्रिया एकल तालिका के साथ काम कर रही है जिसमें 6 गैर क्लस्टर और 1 क्लस्टर इंडेक्स हैं और अद्वितीय आईडी कॉलम 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
आप निष्पादन योजना का उपयोग कर आप क्या क्वेरी के साथ क्या हो रहा है की एक विचार देने के लिए कोशिश की है? साथ ही, पहली बार यह चलने पर, यह स्मृति में निष्पादन योजना को कैश करेगा जिससे अगली बार इसे निष्पादित करने में तेज़ी हो जाएगी। –
कृपया कुछ कोड दिखाएं ताकि हम देख सकें कि आप क्या कर रहे हैं। –
क्या गति के लिए मैन्युअल रूप से निष्पादन योजनाओं को जोड़ने का कोई तरीका है और यह हमेशा के लिए रहेगा। – Chingi