2010-07-29 8 views
6

जब मैं मैन्युअल रूप से MySQL में तालिकाओं को बनाता हूं, तो मैं प्रत्येक फ़ील्ड के लिए एक समय में इंडेक्स जोड़ता हूं जो मुझे लगता है कि मैं क्वेरी के लिए उपयोग करूंगा।MySQL अनुक्रमणिका: एकाधिक इंडेक्स बनाम एक बहु-क्षेत्र कुंजी होने के साथ?

जब मैं phpMyAdmin का उपयोग करता हूं तो मेरे लिए टेबल बनाने के लिए, और मैं अपने इंडेक्स को फॉर्म-टेबल फॉर्म में चुनता हूं, मुझे लगता है कि phpMyAdmin मेरी अनुक्रमणिका को 1 (प्लस मेरे प्राथमिक) में जोड़ती है।

क्या अंतर है? क्या यह दूसरे से बढ़िया है? कौनसे मामलेमें?

धन्यवाद!

उत्तर

8

यह वास्तव में आपके प्रश्नों पर निर्भर करता है। कुछ प्रश्न मल्टीकॉलम इंडेक्स का बेहतर उपयोग करते हैं, कुछ नहीं। EXPLAIN आपका मित्र है।

http://dev.mysql.com/doc/refman/5.6/en/explain.html

इसके अलावा एक बहुत अच्छा संसाधन यहाँ है:

http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html

+0

मैंने अभी तक मेरे किसी भी प्रश्न को वास्तव में लिखा नहीं है (केवल डिजाइन चरण में)। तो मूल रूप से आप कह रहे हैं, जब तक मेरे प्रश्न तैयार नहीं होते हैं तब तक इंडेक्स नहीं होते हैं ... –

+1

कुछ इंडेक्स डिज़ाइन चरण में सोचने के लिए बहुत आसान हैं, लेकिन जब आप अपना प्रश्न बनाते हैं तो उनमें से अधिकतर जोड़े जाएंगे। – Mchl

12

न तो एक विशेष रूप से अच्छी रणनीति है, लेकिन अगर मैं चयन करने के लिए किया था मैं कई एकल अनुक्रमित चुनते थे।

कारण यह है कि यदि आप इंडेक्स के किसी भी पूर्ण उपसर्ग में सभी फ़ील्ड का उपयोग करते हैं तो एक इंडेक्स का उपयोग केवल तभी किया जा सकता है। यदि आपके पास इंडेक्स (ए, बी, सी, डी, ई, एफ) है तो यह a पर फ़िल्टर करने वाली क्वेरी के लिए ठीक काम करता है या a और b दोनों पर फ़िल्टर करने वाली क्वेरी, लेकिन यह केवल एक क्वेरी फ़िल्टरिंग के लिए बेकार होगा c पर।

कोई आसान नियम नहीं है जो हमेशा सर्वोत्तम इंडेक्स चुनने के लिए काम करता है। आपको अपने द्वारा किए जा रहे प्रश्नों के प्रकारों को देखने की आवश्यकता है और उन इंडेक्स का चयन करें जो उन विशेष प्रश्नों को तेज करेंगे। यदि आप कॉलम के आदेश के बारे में सावधानी से सोचते हैं तो आप इंडेक्स की एक छोटी संख्या पा सकते हैं जो कई अलग-अलग प्रश्नों के लिए उपयोगी होगा। उदाहरण के लिए यदि एक प्रश्न में आप a और b दोनों पर फ़िल्टर करते हैं, और एक अन्य क्वेरी जिसे आप केवल b पर फ़िल्टर करते हैं तो (बी, ए) पर एक इंडेक्स दोनों प्रश्नों के द्वारा प्रयोग योग्य होगा लेकिन एक इंडेक्स एक (ए, बी) नहीं होगा।

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