'चयन शीर्ष' प्रदर्शन प्रश्न


18

मेरे पास एक क्वेरी है जो चयन के साथ बहुत तेजी से चलती है top 100और बहुत धीमी बिना top 100। लौटाए गए रिकॉर्ड की संख्या 0. है। क्या आप क्वेरी प्लान या शेयर लिंक में अंतर बता सकते हैं जहां इस तरह के अंतर को समझाया गया है?

topपाठ के बिना क्वेरी :

SELECT --TOP 100
*
FROM InventTrans
     JOIN
     InventDim
     ON InventDim.DATAAREAID = 'dat' AND 
        InventDim.INVENTDIMID = InventTrans.INVENTDIMID
WHERE InventTrans.DATAAREAID = 'dat' AND 
      InventTrans.ITEMID = '027743' AND 
      InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND 
      InventDim.ECC_BUSINESSUNITID = 'Казахстан';

उपरोक्त (बिना top) के क्वेरी योजना :

https://pastebin.com/cbtJpxFf

यहाँ छवि विवरण दर्ज करें

IO और TIME आँकड़े (बिना top):

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(0 row(s) affected)
Table 'INVENTDIM'. Scan count 0, logical reads 988297, physical reads 0, read-ahead reads 1, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'INVENTTRANS'. Scan count 1, logical reads 1234560, physical reads 0, read-ahead reads 14299, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

 SQL Server Execution Times:
   CPU time = 6256 ms,  elapsed time = 13348 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

प्रयुक्त सूचकांक (बिना top):

1. INVENTTRANS.I_177TRANSIDIDX
   4 KEYS:
 - DATAAREAID
 - INVENTTRANSID
 - INVENTDIMID
 - RECID
2. INVENTTRANS.I_177ITEMIDX
   3 KEYS:
   - DATAAREAID
   - ITEMID
   - DATEPHYSICAL 
3. INVENTDIM.I_698DIMIDIDX
   2 KEYS:
   - DATAAREAID
   - INVENTDIMID

के साथ क्वेरी top:

SELECT TOP 100
*
FROM InventTrans
     JOIN
     InventDim
     ON InventDim.DATAAREAID = 'dat' AND 
        InventDim.INVENTDIMID = InventTrans.INVENTDIMID
WHERE InventTrans.DATAAREAID = 'dat' AND 
      InventTrans.ITEMID = '027743' AND 
      InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND 
      InventDim.ECC_BUSINESSUNITID = 'Казахстан';

क्वेरी योजना (TOP के साथ):

https://pastebin.com/0dyu6QZd

यहाँ छवि विवरण दर्ज करें


क्वेरी IO और टाइम आँकड़े (TOP के साथ):

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(0 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 'INVENTTRANS'. Scan count 15385, logical reads 82542, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'INVENTDIM'. Scan count 1, logical reads 62704, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

 SQL Server Execution Times:
   CPU time = 265 ms,  elapsed time = 257 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

प्रयुक्त सूचकांक (TOP के साथ):

 1. INVENTTRANS.I_177TRANSIDIDX
     4 KEYS:
     - DATAAREAID
     - INVENTTRANSID
     - INVENTDIMID
     - RECID
 2. INVENTTRANS.I_177DIMIDIDX
    3 KEYS:
    - DATAAREAID
    - INVENTDIMID
    - ITEMID
 3. INVENTDIM.I_698DIMIDIDX
    2 KEYS:
    - DATAAREAID
    - INVENTDIMID
 4. INVENTDIM.I_698ECC_BUSUNITLOCIDX
    3 KEYS
    - DATAAREAID
    - ECC_BUSINESSUNITID
    - INVENTLOCATIONID

विषय पर किसी भी मदद की गहराई से सराहना करेंगे!


2
मुझे नहीं लगता कि 'ORDER BY' मामलों के बिना 'TOP' की गति। सही परिणाम गति से अधिक महत्वपूर्ण है।
डैन गुज़मैन 13

जवाबों:


15

SQL सर्वर एक अलग तरह के एल्गोरिथ्म का उपयोग करके TOP 100 के लिए अलग निष्पादन योजना बनाता है। कभी-कभी यह तेज होता है, कभी-कभी यह धीमा होता है।

इसके सरल उदाहरणों के लिए, पढ़ें कि एक पंक्ति एक योजना को कितना बदल सकती है? भाग 1 और भाग 2

इन-डेप्थ टेक्निकल डिटेल्स के लिए, प्लस टॉप 100 एल्गोरिथ्म वास्तव में धीमा है, इसका एक उदाहरण पॉल व्हाइट की सॉर्टिंग, रो गोल और टॉप 100 प्रॉब्लम पढ़ें ।

लब्बोलुआब यह है: आपके मामले में, अगर आप जानते हैं कि कोई भी पंक्तियों को वापस नहीं किया जाएगा, तो ठीक है ... क्वेरी नहीं चलाएं, एह? सबसे तेज़ क्वेरी वह है जिसे आप कभी नहीं बनाते हैं। हालाँकि, यदि आपको कोई अस्तित्व जाँचने की आवश्यकता है, तो बस IF EXTSTS (यहाँ पर स्टिक क्वेरी करें), और फिर SQL सर्वर एक अलग निष्पादन योजना भी करेगा।


धन्यवाद, मैं इसे जरूर पढ़ूंगा। मैंने यह भी देखा है कि दोनों परिदृश्यों में पंक्तियों का अनुमान गलत है। इसे किससे जोड़ा जा सकता है? यदि आंकड़े ठीक हैं - मैंने इसे दोनों अनुक्रमित अनुक्रमित पर फुलस्कैन विकल्प के साथ अद्यतन किया है।
जॉर्ज के

इसके अलावा - क्या यह मेरे मामले में उपयुक्त है, क्योंकि मेरे पास कोई आदेश नहीं है, इसलिए मुझे विश्वास है कि कोई SORT मेरी योजना में नहीं होगा?
जॉर्ज के

यह देखना बहुत दिलचस्प होगा कि क्या निष्पादन योजना टॉप 100 और टॉप 101 दोनों के लिए समान है। यदि संभव हो तो कृपया साझा करें। धन्यवाद।
कलाचे खाचरियन

@GeorgeK मैं देख सकता हूं कि आप Dynamics AX का उपयोग कर रहे हैं। ट्रेस फ़्लैग के लिए देखें [ blogs.msdn.microsoft.com/axinthefield/… जो बहुत सारे अनुमान मुद्दों को जन्म दे सकता है। यदि ट्रेस ध्वज 4136 अक्षम है, तो जांच करें कि "विभाजन" कॉलम आपके अनुक्रमित में पहला है। विभाजन के आम तौर पर कुछ अलग मूल्य होते हैं।
हंस वादेर

9

दो योजनाओं को देखते हुए, आपको नाटकीय रूप से अलग-अलग% लागतों के साथ दोनों पर एक महत्वपूर्ण खोज है। यदि आप ऑब्जेक्ट्स पर माउस घुमाते हैं, तो आपको निष्पादन की संख्या दिखाई देगी।

कुंजी लुकअप एक क्लस्टर्ड इंडेक्स के लिए एक लुकअप है क्योंकि इंडेक्स सीक (टॉप राईट) में प्रयुक्त इंडेक्स सभी कॉलम को कवर नहीं कर रहा है (सेलेक्ट करें * इसलिए क्लस्टर इंडेक्स का उपयोग किया जाना चाहिए)।

शीर्ष 100 सूचकांक से कम रीड्स में आवश्यक 100 पंक्तियों को प्राप्त करने में सक्षम है और फिर तालिका में प्रत्येक पंक्ति के बजाय 100 बार लुकअप प्रदर्शन करता है। यह भी बताता है कि 'शीर्ष' न करने पर पढ़े जाने वाले पृष्ठों की संख्या में वृद्धि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.