2011-08-09 10 views
7

है इसलिए मैंने हमेशा सोचा कि अतिरिक्त कॉलम में "कहां उपयोग करना" देखना एक अच्छी बात थी। हालांकि, मैं अपने सहकर्मियों के लिए एक भूरे रंग के बैग के दोपहर का भोजन करने की योजना बना रहा था, और अब मैं इतना निश्चित नहीं हूं। MySQL दस्तावेज़ यह कहता है कि "कहां उपयोग करना":MySQL अनुकूलन: EXPLAIN "अतिरिक्त" कॉलम में "कहां उपयोग करना"

एक WHERE क्लॉज का उपयोग अगली तालिका के विरुद्ध कौन सी पंक्तियों से मेल खाने या क्लाइंट को भेजने के लिए प्रतिबंधित किया जाता है। जब तक कि आप विशेष रूप से तालिका से सभी पंक्तियों को लाने या जांचने का इरादा नहीं रखते हैं, तो अतिरिक्त क्वेरी का उपयोग नहीं किया जा रहा है, यदि अतिरिक्त मूल्य का उपयोग नहीं किया जा रहा है और तालिका में शामिल होने का प्रकार सभी या अनुक्रमणिका है। भले ही आप WHERE क्लॉज के सभी हिस्सों के लिए एक इंडेक्स का उपयोग कर रहे हों, आप देख सकते हैं कि कॉलम नल हो सकता है या नहीं।

इस ओर जाता है मुझे उस पर विश्वास करना भी अगर मेरी कहां खंड केवल सूचकांक के कुछ हिस्सों में शामिल है, कि MySQL अभी भी पंक्तियों की जांच करेंगे स्तंभों शून्य मान हो सकते हैं यदि।

क्या यह सच है? यदि हां, तो क्या मुझे कॉलम को न्यूल शामिल नहीं करना चाहिए यदि मुझे इसकी आवश्यकता नहीं है? क्या मुझे गति वृद्धि दिखाई देगी?

+0

मैंने अभी एक परीक्षण किया है: कॉलम को शून्य से नल तक बदलें, फिर "कहां उपयोग करें" गायब हो गया। – tomwang1013

उत्तर

5

शून्य स्थिति के लिए जांच करने की अतिरिक्त आवश्यकता के कारण, निरर्थक कॉलम में ओवरहेड होता है। यदि किसी कॉलम को शून्य नहीं होना चाहिए, या आपकी आवश्यकताएं शून्य के लिए अनुमति नहीं देती हैं, तो निश्चित रूप से कॉलम not null बनाएं।

इंडेक्स के लिए, सूचकांक निर्माण पर निर्भर करता है। यदि सूचकांक (a,b,c) के साथ परिभाषित किया गया है और आप अपने जहां खंड में b,c का उपयोग कर रहे हैं, तो इस अनुक्रमणिका का उपयोग a के रूप में नहीं किया जा सकता है।

+0

हे @Marc, उत्तर के लिए धन्यवाद। मैं समझता हूं कि मल्टीपार्ट इंडेक्स कैसे काम करते हैं। मुझे लगता है कि मैं जो पूछ रहा हूं वह है: यदि मेरे पास इंडेक्स (ए, बी, सी) के साथ एक टेबल है और "जैसे ए, बी, सी तालिका से सी चुनें जहां एक =? और बी =? और सी =?" और कॉलम सी शून्य है, क्या MySQL को अभी भी प्रत्येक पंक्ति का निरीक्षण करना है, या सूचकांक पूरी तरह से क्वेरी को हल करता है? –

+0

यह आंशिक रूप से ए/बी के आधार पर फ़िल्टर करने में सक्षम होगा, लेकिन अभी भी nulls की जांच के लिए सी के साथ अतिरिक्त कार्य करना होगा। कोई सूचकांक की तुलना में अधिक कुशल, निश्चित रूप से, लेकिन सभी तीन कॉलम गैर-शून्य होने पर कुशल नहीं हैं। –

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