2008-11-04 18 views
6

मैं जैसे मेरी डेटाबेस पर एक प्रश्न है:प्रदर्शन

SELECT * FROM expenses WHERE user_id = ? AND dated_on = ? 

मैं दोनों user_id और dated_on स्तंभों पर मेज पर एक सूचकांक को शामिल किया है । जब मैं SHOW INDEXES FROM expenses का उपयोग कर अनुक्रमित निरीक्षण, वहाँ दो लाइनें हैं - 1 का एक seq_in_index मूल्य के साथ एक, 2.

एक seq_in_index मूल्य के साथ अन्य मेरे सवाल है, अगर मैं तो एक प्रश्न जो केवल में से एक का उपयोग करता है प्रस्तुत दो कहां खंड, जैसे:

SELECT * FROM expenses WHERE user_id = ? 

एक और जो पूरी तरह से अनुक्रमित सूचकांक user_id स्तंभ बनाने का कोई लाभ है, या user_id/dated_on सूचकांक ऊपर वर्णित बस के रूप में कुशलता से उपयोग किया जाएगा?

अंत में, कैसे क्वेरी का उपयोग करता है, तो के बारे में:

SELECT * FROM expenses WHERE dated_on = ? 

कैसे 2 की seq_in_index मूल्य सूचकांक का उपयोग करें और इस स्थिति में प्रदर्शन को प्रभावित करता है?

उत्तर

8

MySQL any left portion of an index का उपयोग कर सकते हैं।

आपके उदाहरण में SELECT * FROM expenses WHERE user_id = ? इंडेक्स का उपयोग करेगा लेकिन SELECT * FROM expenses WHERE dated_on = ? नहीं होगा।

एक 3 स्तंभ अनुक्रमणिका एक के लिए, बी, सी, WHERE A = ? AND B = ? एक सूचकांक ए और बी से अधिक उपयोग करेगा, लेकिन WHERE A = ? AND C = ? केवल पर एक सूचकांक का उपयोग करेगा एक

5

यदि उपयोगकर्ता_आईडी और dated_on पर आपकी अनुक्रमणिका वास्तव में उस क्रम में (user_id पहले) है, तो इसका उपयोग उपयोगकर्ता_आईडी क्वेरी के लिए भी किया जाएगा। आप क्वेरी के लिए वास्तविक रणनीति देखने के लिए EXPLAIN का उपयोग करके जांच सकते हैं।

+1

मैं वास्तव में रुचि है पता है कि कैसे seq_in_index मूल्य परिवर्तन क्वेरी प्रदर्शन, इसलिए मैंने तदनुसार प्रश्न संपादित किया है – Olly

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