मेरे पास एक बहुरंगी सूचकांक वाली एक तालिका है, और मुझे प्रश्नों पर अधिकतम प्रदर्शन प्राप्त करने के लिए अनुक्रमित की उचित छंटाई के बारे में संदेह है।
परिदृश्य:
PostgreSQL 8.4, लगभग एक मिलियन पंक्तियों वाली तालिका
कॉलम c1 में मान लगभग 100 भिन्न मान हो सकते हैं । हम मान सकते हैं कि मूल्य समान रूप से वितरित किए गए हैं, इसलिए हमारे पास हर संभव मूल्य के लिए लगभग 10000 पंक्तियाँ हैं।
कॉलम c2 में 1000 विभिन्न मूल्य हो सकते हैं । हमारे पास हर संभव मूल्य के लिए 1000 पंक्तियाँ हैं।
डेटा खोजते समय, स्थिति में हमेशा इन दो स्तंभों के लिए मूल्य शामिल होते हैं, इसलिए तालिका में c1 और c2 के संयोजन का एक बहुरंगी सूचकांक होता है। यदि आपने फ़िल्टरिंग के लिए सिर्फ एक कॉलम का उपयोग करके प्रश्न किए हैं, तो मैंने एक बहुरंगी सूचकांक में कॉलम को ठीक से ऑर्डर करने के महत्व के बारे में पढ़ा है । हमारे परिदृश्य में ऐसा नहीं है।
मेरा सवाल यह है:
इस तथ्य को देखते हुए कि फिल्टर में से एक डेटा के बहुत छोटे सेट का चयन करता है, क्या मैं प्रदर्शन में सुधार कर सकता हूं यदि पहला इंडेक्स सबसे अधिक चयनात्मक है (जो एक छोटे सेट की अनुमति देता है)? मैंने इस प्रश्न पर तब तक कभी विचार नहीं किया, जब तक कि मैंने संदर्भित लेख के ग्राफिक्स को नहीं देखा:
बहुरंगी अनुक्रमणिकाओं के बारे में संदर्भित लेख से ली गई छवि ।
फ़िल्टरिंग के लिए क्वेरीज़ दो स्तंभों से मानों का उपयोग करती हैं। मेरे पास फ़िल्टर करने के लिए सिर्फ एक कॉलम का उपयोग करने के लिए कोई प्रश्न नहीं है। वे सब के सब कर रहे हैं: WHERE c1=@ParameterA AND c2=@ParameterB
। इस तरह की शर्तें भी हैं:WHERE c1 = "abc" AND c2 LIKE "ab%"