2009-12-03 17 views
15

बस एक साधारण सवाल है, लेकिन क्या आपके सूचकांक का क्रम कई स्तंभों पर फैलता है?एकाधिक कॉलम पर सूचकांक का आदेश

उदाहरण के लिए

, क्वेरी लेने:

 
CREATE INDEX my_index 
ON my_table (column_1, column_2) 

या:

 
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 

मैं इस तरह एक प्रश्न के लिए एक सूचकांक जोड़ना चाहते हैं, तो यह फर्क पड़ता है मेरी सूचकांक इस तरह बनाई गई है अगर इस तरह:

 
CREATE INDEX my_index 
ON my_table (column_2, column_1) 

सहायता के लिए धन्यवाद!

उत्तर

21

उदाहरण में आप कॉलम ऑर्डर से कोई फर्क नहीं पड़ता।

इससे कोई फर्क नहीं पड़ता कि आप कॉलम पर ऑर्डर करते हैं; (col1,col2) पर एक सूचकांक ORDER BY col1, col2 के लिए उपयोग किया जा सकता है लेकिन ORDER BY col2, col1 के लिए नहीं।

WHERE खंडों के लिए, (col1, col2) पर एक सूचकांक WHERE col1 = 1 AND col2 = 1 के लिए काम करता है। यह WHERE col1 = 1 के लिए भी काम करता है। लेकिन यह WHERE col2 = 1 के साथ मदद नहीं कर सकता है।

+4

दरअसल यह इस मामले में भी मायने रख सकता है। यदि लगभग हर पंक्ति में col1 = 1 है, तो कॉल 2 सबसे पहले होने पर इंडेक्स बेहतर काम करेगा, यहां तक ​​कि पहिया भी आप दोनों से पूछताछ कर रहे हैं। –

+3

यह प्रदान किए गए उदाहरण में भी महत्वपूर्ण हो सकता है, अगर एक कॉलम में दूसरे की तुलना में काफी अधिक वेगशीलता है। पहले उच्च चयनकता (कई अलग-अलग मान) वाले कॉलम रखें। – Manu

+0

इस जवाब में उत्कृष्ट जानकारी को समझने में सहायता के लिए कि सिस्टम पर पहले से मौजूद इंडेक्स को कैसे हिट करना है। – Swoop

0

इसका पता लगाने का सबसे अच्छा तरीका यह मापना है। एक कोशिश करें, प्रदर्शन को मापें, फिर उस अनुक्रमणिका को हटा दें और दूसरे को आजमाएं। आम तौर पर आप डिस्क पर इंडेक्स में एकसाथ झूठ बोलने के लिए एक साथ पूछे जाने वाले डेटा चाहते हैं, और इंडेक्स में कॉलम का क्रम डिस्क पर इंडेक्स को संग्रहीत करने के तरीके में अंतर डालता है। यह अनुमान लगाना बहुत मुश्किल है कि इंडेक्स का कौन सा संयोजन सबसे अच्छा काम करेगा, इसलिए कुछ अलग-अलग संभावनाएं आज़माएं और मापें कि यह पता लगाने के लिए कि आपके डेटा के लिए सबसे अच्छा क्या है।

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