MySQL में फ़िल्टर्ड का अर्थ क्या है?


21

जैसा कि MySQL डॉक्स में यहाँ बताया गया है :

फ़िल्टर्ड कॉलम तालिका पंक्तियों का अनुमानित प्रतिशत इंगित करता है जिन्हें तालिका स्थिति द्वारा फ़िल्टर किया जाएगा। यही है, पंक्तियाँ जांची गई पंक्तियों की अनुमानित संख्या दिखाती हैं और पंक्तियाँ × फ़िल्टर / 100 उन पंक्तियों की संख्या को दर्शाती हैं जिन्हें पिछली तालिकाओं के साथ जोड़ा जाएगा। MySQL 5.7.3 से पहले, यदि आप EXPLAIN EXTENDED का उपयोग करते हैं तो यह कॉलम प्रदर्शित होता है। MySQL 5.7.3 के अनुसार, विस्तारित आउटपुट डिफ़ॉल्ट रूप से सक्षम है और अतिरिक्त कीवर्ड अनावश्यक है।

मैं अभी भी नहीं मिला। यहाँ "फ़िल्टर्ड" का अर्थ क्या है? इस कॉलम से हमें क्या जानकारी मिल सकती है?

उदाहरण के लिए, जब मैं क्वेरी करना शुरू करता हूं, तो कुछ क्वेरी 100 दिखाएगी, और कुछ अन्य 18 या 100 से कम दिखाएंगे।

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  | <--
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

इस मूल्य से हम मुख्य बिंदु क्या कह सकते हैं?

क्या यह कहता है कि, कॉलम केवल १ says% फ़िल्टर किया गया है? या यदि स्कोर कम होता है, तो सूचकांक / क्वेरी जितना अच्छा होता है?

मैं MySQL 5.7 का उपयोग कर रहा हूं

जवाबों:


30

यहां फ़िल्टर करने का मतलब है कि पंक्तियों के एक सेट पर एक स्थिति लागू करना, जिसे एक typeखोज द्वारा संभावित पंक्तियों के रूप में चुना गया था , और केवल उन पंक्तियों को रखने के लिए जो शर्त को पूरा करते हैं:

MySQL सबसे पहले एक इंडेक्स का उपयोग करने की कोशिश करेगा, उदाहरण के लिए -key का उपयोग करके rangeअपनी टेबल पर एक स्कैन करें । यह उस सूचकांक का उपयोग करके 174 पंक्तियों को प्राप्त करने का अनुमान लगाता है, जो कि संख्या है । इस चरण को अभी तक फ़िल्टरिंग नहीं कहा जाता है।asearchrows

उसके बाद, इन 174 पंक्तियों को अतिरिक्त स्थितियों (आमतौर पर आपके where-क्लॉज) के खिलाफ जांचना पड़ता है। MySQL ने अब अनुमान लगाया कि केवल 32 पंक्तियाँ, इसलिए इन 174 पंक्तियों में से 18%, फ़िल्टर लागू होने के बाद बनी रहेंगी। यह 18% मूल्य है filtered

जबकि 174 की बजाय 32 पंक्तियों का होना स्पष्ट रूप से बेहतर है (यदि आपको उदाहरण के लिए बाद में joinउन्हें किसी अन्य तालिका के साथ रखना है ), तो एक "संपूर्ण" सूचकांक ने आपको प्रारंभिक खोज से सीधे इन 32 पंक्तियों को दिया होगा, जिससे आपको देखने का समय मिल जाएगा। और सभी संभावित पंक्तियों का 82% फ़िल्टर करें।

तो एक कम मूल्य का संकेत हो सकता एक बेहतर सूचकांक वहाँ हो सकता है कि: जैसे एक के साथ पूर्ण तालिका स्कैन rows=1000और filtered=0.1%साथ एक सूचकांक देखने बन सकता है rows=1और filtered=100%अगर आप एक अच्छा सूचकांक जोड़ें।

दूसरी ओर, आप बहुत अच्छी तरह से पूरी तरह से इस filtered-वल्यू को अनदेखा कर सकते हैं (जो कि ज्यादातर मामलों में वैसे भी बहुत खराब अनुमान है), और अपनी क्वेरी को अनुकूलित करने के लिए अन्य अधिक महत्वपूर्ण स्तंभों (विशेष रूप से type, keyऔर extra) पर ध्यान केंद्रित करें। उदाहरण के लिए, इससे छुटकारा पाना बेहतर हो सकता है filesort(जैसे कि एक सूचकांक का उपयोग करके जो संतुष्ट करता है order by), भले ही यह कम filteredमूल्य में हो। और एक बेहतर typeप्रदर्शन परिणाम में सुधार कर सकता है, भले ही यह बदल न जाए या कम भी हो filtered। उपरोक्त उदाहरण में filtered=0.1%, type=allपहले से ही यह इंगित करने के लिए पर्याप्त होगा कि आप सूचकांक को जोड़कर उस क्वेरी को सुधारने में सक्षम हो सकते हैं, बिना किसी को देखे filtered

तो उस मूल्य को बहुत गंभीरता से न लें: न तो 100इसका मतलब है कि आपके सूचकांक अच्छे हैं, और न ही कम मूल्य के खराब सूचकांक को इंगित करता है। typeउसके लिए बेहतर संकेतक है।


1
समझाने के लिए धन्यवाद। यह मेरे लिए बहुत कुछ समझा रहा है। मुझे लगता है कि अच्छे सूचकांक को बनाए रखने और चयन करने के लिए यह उपयोगी है
इमान तूमोरंग

@ImanTumorang मैंने एक टिप्पणी और इसके बारे में एक उदाहरण जोड़ा: उस मूल्य को भी गंभीरता से न लें। आप अपनी क्वेरी को केवल देखकर typeऔर extra(जो अपने आप में एक कला है) को अनुकूलित कर सकते हैं ; आप बिना filteredनहीं रह सकते , लेकिन बिना नहीं type
सोलरफ्लेयर

ठीक है फिर। मैं समझ गया। मैंने पहले ही इसे मैसकॉल डॉक्स में पढ़ा, कि वे प्रदर्शन को कैसे प्रभावित करते हैं। आपकी व्याख्या के लिए धन्यवाद: डी
इमान टुमोरंग

एक और टिप: फ़िल्टर्ड गणना में शामिल अंतिम तालिका के लिए छोड़ दिया जाता है। यानी, यह 100% दिखाएगा भले ही वास्तव में ऐसी स्थितियां हों जो जांच की गई कुछ पंक्तियों को फ़िल्टर कर देंगी। तर्क यह है कि यह फ़िल्टरिंग कारक का अनुमान लगाने के लिए कुछ खर्च करता है, और यह क्वेरी निष्पादन योजना को प्रभावित नहीं करेगा यदि यह अंतिम तालिका पर है, इसलिए वे गणना को लंघन करने के लिए डिफ़ॉल्ट हैं।
बिल करविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.