मेरे पास एक प्रश्न है जो पूर्ण जॉइन के साथ 2.5 सेकंड लेता है, और INNER, दाएं या बाएं जॉइन के साथ 40 सेकंड लेता है।एक पूर्ण नौकरी से INNER/दाएं/बाएं जॉइन 14x धीमी गति से कैसे हो सकता है?
यहां प्रश्न है। सबक्वायरी (दो बार किया गया) केवल अपने आप 1.3 सेकंड लेता है। दिनांक समय से बाहर एम.एम. स्ट्रिंग:
SELECT T1.[time], T1.Total, T1.rn, T2.[time], T2.Total, T2.rn
FROM
(
select [time], MAX(ComputedValue) as Total, row_number() over (order by [time]) as rn
FROM
(
select SUBSTRING(CONVERT(CHAR(10), IntervalStartTime, 108), 0, 6) as [time], ComputedValue
from LoadTestTransactionSample
where LoadTestRunId=285
and CounterName='Total Transactions'
and TransactionName='Export'
) foo
group by [time]
) T1
_____ JOIN
(
select [time], MAX(ComputedValue) as Total, row_number() over (order by [time]) as rn
FROM
(
select SUBSTRING(CONVERT(CHAR(10), IntervalStartTime, 108), 0, 6) as [time], ComputedValue
from LoadTestTransactionSample
where LoadTestRunId=285
and CounterName='Total Transactions'
and TransactionName='Export'
) foo
group by [time]
) T2
ON T1.rn = T2.rn - 1
select SUBSTRING
बिट सिर्फ एक एचएच हो रही है। LoadTestTransactionSample
वास्तव में एक दृश्य है जो 8 टेबल में शामिल हो जाता है। (एफवाईआई डेटाबेस एक विजुअल स्टूडियो लोड टेस्ट परिणाम स्टोर है)। यहाँ अपने (प्रासंगिक) स्तंभ हैं:
LoadTestRunId INT NOT NULL
CounterName NVARCHAR(255) NOT NULL
TransactionName NVARCHAR(64) NOT NULL
IntervalStartTime DATETIME NOT NULL
IntervalEndTime DATETIME NOT NULL
ComputedValue REAL
एक पूर्ण शामिल हों रिटर्न एक अतिरिक्त अवांछित पंक्ति, तो मैं सही जवाब पाने के लिए एक सही क्या करना चाहिए में शामिल हों।
मैं वास्तव में एक समाधान के लिए नहीं देख रहा हूँ (मैं एक है:
प्री-फ़ेच एक मेज चर
उपयोग एसक्यूएल सर्वर में 2012 विश्लेषणात्मक समारोह 'अंतराल', धन्यवाद @ a1ex07 सबक्वेरी), बस कुछ के रूप में समझ पर इन प्रकारों के प्रकार के बीच प्रदर्शन में चरम अंतर का कारण बन सकता है।
संपादित करें: यहाँ slow right join query plan और fast full join query plan है। स्क्रीनशॉट पोस्ट करने के लिए वे बहुत बड़े हैं।
संपादित करें 2: असल में क्वेरी योजनाओं का अधिकार है 45% में शामिल हों और पूर्ण 55% है, जो पूरी तरह से पता चला है गलत हो पर JOIN (वास्तविकता में यह भी बदतर 99%/1% समाप्त होता है)। मुझे लगता है कि इसका मतलब है कि मुझे वास्तविक निष्पादन आंकड़ों पर भरोसा करना है।
संपादित करें 3: धीमी गति से सही के लिए सांख्यिकी शामिल हों:
(40 row(s) affected)
Table 'LoadTestPerformanceCounterCategory'. Scan count 0, logical reads 37556, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounter'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestScenario'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestCase'. Scan count 0, logical reads 176464, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'WebLoadTestTransaction'. Scan count 0, logical reads 13411100, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterInstance'. Scan count 0, logical reads 36563718, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterSample'. Scan count 19721, logical reads 269657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestRunInterval'. Scan count 41, logical reads 205, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 36754 ms, elapsed time = 36763 ms.
सांख्यिकी के लिए तेजी से पूर्ण शामिल हों:
(41 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterCategory'. Scan count 0, logical reads 1832, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounter'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestScenario'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestCase'. Scan count 0, logical reads 8608, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'WebLoadTestTransaction'. Scan count 0, logical reads 654200, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterInstance'. Scan count 0, logical reads 1783596, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestPerformanceCounterSample'. Scan count 962, logical reads 13154, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LoadTestRunInterval'. Scan count 2, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 1950 ms, elapsed time = 1944 ms.
अधिकार में शामिल होने के बड़े पैमाने पर अधिक पढ़ता है और अधिक से अधिक स्कैन कर रहा है एक स्पष्ट रूप से समान प्रश्न योजना के बावजूद पूर्ण जॉइन।
कार्यबल (पूर्ण जॉइन में) एक संकेत है? क्या यह एक अस्थायी मेज है?
क्या ऐसा लगता है कि क्वेरी ऑप्टिमाइज़र टूटा हुआ है?
पर आपकी क्वेरी योजना/आंकड़े दिखाते हैं निर्धारित करें और देखें [शर्म से सिर छुपाता है]। डीडीएल स्क्रिप्ट को आपकी स्कीमा और डेटा को दोहराने में सक्षम होने के बिना, कोई भी जवाब मूल रूप से एक अनुमान है। साथ ही, क्या ये प्रदर्शन आंकड़े बाद के प्रश्नों के अनुसार पहली क्वेरी पर अलग हैं? यह एक संकेत है कि आपका कैश शामिल हो रहा है। – Heather
मुझे लगता है कि हीदर का मतलब है कि आप उन्हें 1-2-3-4 और फिर 4-3-2-1 चलाने के लिए कहें और –
की तुलना करें, इसके अलावा, क्वेरी का प्रत्येक संस्करण कैश में अपनी क्वेरी योजना उत्पन्न करता है, और ये आवश्यक नहीं हैं एक ही समय में ताज़ा किया। यह कभी-कभी प्रदर्शन conundrums का कारण बन सकता है। –