निम्नलिखित ढेर तालिका को देखते हुए 1 से 400 तक 400 पंक्तियों की संख्या:
DROP TABLE IF EXISTS dbo.N;
GO
SELECT
SV.number
INTO dbo.N
FROM master.dbo.spt_values AS SV
WHERE
SV.[type] = N'P'
AND SV.number BETWEEN 1 AND 400;
और निम्नलिखित सेटिंग्स:
SET NOCOUNT ON;
SET STATISTICS IO, TIME OFF;
SET STATISTICS XML OFF;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
निम्नलिखित SELECT
कथन लगभग 6 सेकंड में पूरा होता है ( डेमो , प्लान ):
DECLARE @n integer = 400;
SELECT
c = COUNT_BIG(*)
FROM dbo.N AS N
CROSS JOIN dbo.N AS N2
CROSS JOIN dbo.N AS N3
WHERE
N.number <= @n
AND N2.number <= @n
AND N3.number <= @n
OPTION
(OPTIMIZE FOR (@n = 1));
नोट: @ OPTIMIZE FOR
क्लॉज सिर्फ एक समझदारी से आकार के रिप्रो के उत्पादन के लिए है जो वास्तविक समस्या के आवश्यक विवरणों को कैप्चर करता है, जिसमें एक कार्डिनैलिटी मिसैस्टी भी शामिल है जो कई कारणों से उत्पन्न हो सकती है।
जब एकल-पंक्ति आउटपुट को तालिका में लिखा जाता है, तो 19 सेकंड लगते हैं ( डेमो , प्लान ):
DECLARE @T table (c bigint NOT NULL);
DECLARE @n integer = 400;
INSERT @T
(c)
SELECT
c = COUNT_BIG(*)
FROM dbo.N AS N
CROSS JOIN dbo.N AS N2
CROSS JOIN dbo.N AS N3
WHERE
N.number <= @n
AND N2.number <= @n
AND N3.number <= @n
OPTION
(OPTIMIZE FOR (@n = 1));
निष्पादन योजनाएं एक पंक्ति के सम्मिलित से अलग दिखाई देती हैं।
सभी अतिरिक्त समय सीपीयू के उपयोग से लगता है।
INSERT
बयान इतना धीमा क्यों है ?