36

MySQL व्याख्या योजना में Select tables optimized away का अर्थ क्या है?MySQL में "अनुकूलित टेबल का चयन करें" का अर्थ बताएं योजना

explain select count(comment_count) from wp_posts; 

+----+-------------+---------------------------+-----------------------------+ 
| id | select_type | table,type,possible_keys, | Extra      | 
| |    | key,key_len,ref,rows  |        | 
+----+-------------+---------------------------+-----------------------------+ 
| 1 | SIMPLE  | all NULLs     | Select tables optimized away| 
+----+-------------+---------------------------+-----------------------------+ 
1 row in set (0.00 sec) 

नोट: explain plan आउटपुट अनुक्रम के लिए संपादित किया गया।

+0

मुझे एक ही क्वेरी करते समय इनो डीबी टेबल पर एक ही परिणाम मिला: टी 1 से चुनें MAX (के 3) जहां 1 = '1' और के 2 = '2', जहां k1, k2 और k3 कुंजी के सभी भाग हैं । – Ghostrider

उत्तर

20

इसका मतलब है कि आपने एक क्वेरी की है जो तालिका में पंक्तियों की संख्या की गणना करने से कहीं ज्यादा कुछ नहीं करती है, और वह तालिका एक माईसैम तालिका है। MyISAM टेबल को एक अलग पंक्ति गणना के साथ संग्रहीत किया जाता है, इसलिए इस क्वेरी को करने के लिए MySQL को किसी भी तालिका पंक्ति डेटा को देखने की आवश्यकता नहीं है। इसके बजाए यह तुरंत पूर्व गणना की गई पंक्ति गणना देता है। इसलिए तालिका का उपयोग 'अनुकूलित दूर' है और क्वेरी बिजली-तेज है।

यह MySQL में MySQL जैसे अन्य स्टोरेज इंजनों पर भी नहीं होगा। लेकिन वास्तव में, आप अन्य मामलों में कई मामलों में InnoDB का उपयोग करना चाहते हैं और MyISAM नहीं। (और यहां तक ​​कि पंक्ति संख्या अनुकूलन के बिना क्वेरी इस तरह की बहुत, बहुत तेजी से होता है।)

select count(comment_count) from wp_posts; 

कि क्या करना है क्या तुम सच में मतलब है? यह SELECT COUNT(*)... जैसा है (मानते हैं कि comment_countNULL नहीं हो सकता है, जो यह नहीं हो सकता है या आपको ऑप्टिमाइज़ेशन नहीं मिला होगा)। यदि आप कुल comment_count एस चाहते हैं तो आपको SUM(comment_count) का उपयोग करना चाहिए, और आपको 'अनुकूलित दूर' व्यवहार नहीं मिलेगा।

+26

यदि यह सब सच था, तो अब यह नहीं है। मुझे उस संदेश को एक एकल इनोडब टेबल पर एक एक्सप्लाइन से मिलता है - MySQL 5.5.17। – Riedsio

+0

मुझे एक एकल InnoDB तालिका पर एक चयन से EXPLAIN से वह संदेश भी मिलता है। –

+1

चुनिंदा गिनती (फ़ील्ड) का चयन नहीं किया गया है जो चुनिंदा गिनती (*) से अधिक कुशल होना चाहिए? – jsh

0

आपकी क्वेरी देखे बिना कहने के लिए है, लेकिन इस परिणाम होगा मुश्किल यदि आप उदाहरण के लिए एक स्थिर मान का चयन किया -

का चयन करें 1 से atable

या आपके एक या तालिकाओं के अधिक नहीं है प्रश्न का उत्तर देने के लिए आवश्यक है।

7

इसका मतलब है कि तालिका पूरी तरह से क्वेरी से अनुकूलित है। आप इससे बेहतर नहीं हो सकते हैं।

31

MySQL प्रलेखन से:

क्वेरी केवल सकल कार्यों (न्यूनतम(), मैक्स()) थे कि सभी MyISAM के लिए एक सूचकांक, या COUNT (*) का उपयोग कर हल हो गई है, और कोई ग्रुप निहित खंड द्वारा। अनुकूलक ने निर्धारित किया कि केवल एक पंक्ति लौटा दी जानी चाहिए।

असल में इसका मतलब है कि आपकी क्वेरी डेटा का उपयोग करती है जो सीधे MySQL पर उपलब्ध है और क्वेरी निरंतर समय में चलती है।

3

स्वीकार्य उत्तर और सबसे ऊपर उल्लिखित उत्तर यह सुझाव देता है कि इस प्रकार की स्पष्टीकरण केवल MyISAM तालिकाओं पर लागू होती है। लेकिन मैं इसे एक इनो डीबी टेबल के साथ देख रहा हूं।

मैं संस्करण 5.6 के लिए यहाँ mysql प्रलेखन ऊपर देखा, https://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_extra

मैं नहीं दिख रहा है कि स्पष्टीकरण MyISAM लिए प्रतिबंधित है। लेकिन COUNT (*) के विशिष्ट मामले में, एक नोट है जो कहता है कि इस प्रकार की स्पष्टीकरण तालिका के मामले में MyISAM होने के मामले में मान्य हो जाएगी।

'भंडारण इंजनों के लिए जो प्रति तालिका (जैसे कि माईसाम, लेकिन इनो डीबी नहीं) की सटीक पंक्ति गणना बनाए रखने के लिए, यह अतिरिक्त मान COUNT (*) क्वेरी के लिए हो सकता है जिसके लिए WHERE क्लॉज गुम है या हमेशा सत्य है खंड द्वारा कोई समूह नहीं।(यह एक अंतर्निहित समूहबद्ध क्वेरी का एक उदाहरण है जहां स्टोरेज इंजन प्रभावित करता है कि पंक्तियों की एक निश्चित संख्या को पढ़ा जा सकता है।) '

0

innodb तालिकाओं के लिए मैंने एक मिनट की तलाश करते समय "अनुकूलित टेबल का चयन करें" देखा है या अधिकतम कॉलम जिसमें auto_increment है। Info_schema.tables अधिकतम auto_increment रखता है ताकि ऑप्टिमाइज़र के लिए बस वहां देखना आसान हो और उपयोगकर्ता तालिका को कभी भी स्पर्श न करें। यह गिनती जैसी चीज़ों के लिए काम नहीं करेगा क्योंकि अंतराल हो सकता है ताकि अनुकूलक को उत्तर के लिए उपयोगकर्ता तालिका में जाना होगा।

संबंधित मुद्दे