जब मुझे dbcc show_statistics ('Reports_Documents', PK_Reports_Documents)
रिपोर्ट आईडी 18698 के लिए निम्नलिखित परिणाम मिलेंगे:
इस प्रश्न के लिए:
SELECT *
FROM Reports_Documents
WHERE ReportID = 18698 option (recompile)
मुझे एक क्वेरी योजना मिलती है जो PK_Reports_Documents
उम्मीद के मुताबिक क्लस्टर इंडेक्स सीक बनाती है।
लेकिन मुझे क्या लगता है कि पंक्तियों की अनुमानित संख्या के लिए गलत मूल्य है:
के अनुसार इस :
जब नमूना क्वेरी WHERE क्लॉज मान हिस्टोग्राम RANGE_HI_KEY मान के बराबर होती है, तो SQL सर्वर पंक्तियों की संख्या के बराबर निर्धारित करने के लिए हिस्टोग्राम में EQ_ROWS कॉलम का उपयोग करेगा।
यह वह तरीका है जिससे मैं उम्मीद करूंगा कि यह वास्तविक जीवन में ऐसा न हो। मैंने कुछ अन्य RANGE_HI_KEY
मूल्यों की भी कोशिश की, show_statistics
जो उसी द्वारा प्रदान किए गए हिस्टोग्राम में मौजूद थे और उसी का अनुभव किया। मेरे मामले में यह समस्या कुछ अयोग्यतापूर्ण निष्पादन योजनाओं का उपयोग करने के लिए कुछ प्रश्नों के कारण प्रतीत होती है, जिसके परिणामस्वरूप कुछ मिनटों का निष्पादन समय होता है जबकि मैं इसे 1 सेकंड में क्वेरी संकेत के साथ चलाने के लिए प्राप्त कर सकता हूं।
सब सब में: क्या कोई मुझे समझा सकता है EQ_ROWS
कि हिस्टोग्राम से अनुमानित संख्याओं के लिए इस्तेमाल क्यों नहीं किया जा रहा है और गलत अनुमान कहाँ से आता है?
थोड़ी अधिक (संभवतः उपयोगी) जानकारी:
- ऑटो के आँकड़े जारी हैं और सभी आँकड़े आज तक हैं।
- जिस तालिका को उद्धृत किया जा रहा है, उसमें लगभग 80 मिलियन पंक्तियाँ हैं।
PK_Reports_Documents
पीकेReportID INT
और से मिलकर एक संयोजन हैDocumentID CHAR(8)
क्वेरी कुल 5 अलग-अलग सांख्यिकी ऑब्जेक्ट लोड करने के लिए लगती है, जिनमें से सभी में ReportID
तालिका से कुछ अन्य कॉलम होते हैं । वे सभी नए सिरे से अपडेट किए गए हैं। RANGE_HI_KEY
नीचे दी गई तालिका में हिस्टोग्राम में उच्चतम ऊपरी बाध्य स्तंभ मान है।
+-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+
| name | stats_id | auto_created | user_created | Leading column Type | RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | DISTINCT_RANGE_ROWS | AVG_RANGE_ROWS |
+-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+
| PK_Reports_Documents | 1 | 0 | 0 | Stationary | 18722 | 0 | 2228,526 | 0 | 1 |
| _dta_index_Reports_Documents_42_1629248859__K1_K63_K14_K13_K22_K23_72_6 | 62 | 0 | 0 | Stationary | 18698 | 0 | 2228,526 | 0 | 1 |
| _dta_stat_1629248859_1_1_59 | 76 | 0 | 1 | Stationary | 18686 | 50,56393 | 1 | 0 | 13397,04 |
| _dta_stat_1629248859_1_22_14_18_12_6 | 95 | 0 | 1 | Stationary | 18698 | 0 | 2228,526 | 0 | 1 |
| _dta_stat_1629248859_1_7_14_4_23_62 | 96 | 0 | 1 | Stationary | 18698 | 56,63327 | 21641,5 | 0 | 14526,44 |
+-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+
sp_updatestats
आँकड़े अद्यतन करने के लिए हर रात चलाने के लिए निर्धारित है।
_dta_
आँकड़े नहीं बनाए थे , वे तब से वहाँ थे जब से मुझे डीबी पर अपना पहला नज़रिया मिला। मुझे नहीं पता था कि सिफारिशों का उपयोग करने से ऐसे प्रतिकूल प्रभाव पड़ सकते हैं ...