एकल-स्तंभ अनुक्रमणिका
पोस्टग्रेज बिटमैप इंडेक्स स्कैन . के साथ एक ही क्वेरी में कई इंडेक्स को बहुत कुशलता से जोड़ सकते हैं . अधिकांश समय, सबसे चयनात्मक सूचकांक चुना जाता है (या दो, बिटमैप इंडेक्स स्कैन के साथ संयुक्त) और बाकी को फ़िल्टर किया जाता है। एक बार जब परिणाम सेट पर्याप्त रूप से संकीर्ण हो जाता है, तो यह अधिक अनुक्रमणिका को स्कैन करने में सक्षम नहीं होता है।
बहु-स्तंभ अनुक्रमणिका
पूरी तरह से मेल खाने वाला बहुस्तंभ अनुक्रमणिका होना अभी भी तेज़ है, लेकिन परिमाण के क्रम से नहीं।
चूंकि आप एक सरणी प्रकार शामिल करना चाहते हैं मैं GIN . का उपयोग करने का सुझाव देता हूं अनुक्रमणिका। AFAIK, सरणी प्रकार पर सामान्य प्रयोजन के जीआईएसटी इंडेक्स के लिए ऑपरेटर कक्षाएं गायब हैं। (अपवाद intarray
. है integer
. के लिए सरणियाँ।)
integer
शामिल करने के लिए कॉलम, पहले अतिरिक्त मॉड्यूल स्थापित करें btree_gin
, जो आवश्यक GIN ऑपरेटर कक्षाएं प्रदान करता है। प्रति डेटाबेस एक बार चलाएं :
CREATE EXTENSION btree_gin;
तब आप अपनी बहु-स्तंभ अनुक्रमणिका बनाने में सक्षम होंगे:
CREATE INDEX tbl_abc_gin_idx ON tbl USING GIN(a, b, c);
इंडेक्स कॉलम का क्रम GIN इंडेक्स के लिए अप्रासंगिक है। मैनुअल:
<ब्लॉकक्वॉट>एक बहु-स्तंभ GIN अनुक्रमणिका का उपयोग उन क्वेरी शर्तों के साथ किया जा सकता है जिनमें अनुक्रमणिका के स्तंभों का कोई उपसमुच्चय शामिल होता है। B-tree या GiST के विपरीत, अनुक्रमणिका खोज प्रभावशीलता समान होती है, चाहे कोई भी अनुक्रमणिका स्तंभ (स्तंभों) क्वेरी शर्तों का उपयोग करें।
निकटतम पड़ोसी खोज
चूँकि आप एक PostGis geometry
including शामिल कर रहे हैं टाइप करें, संभावना है कि आप निकटतम पड़ोसी खोज करना चाहते हैं, जिसके लिए आपको GiST . की आवश्यकता है अनुक्रमणिका। इस मामले में मेरा सुझाव है दो इंडेक्स:
CREATE INDEX tbl_ac_gist_idx ON tbl USING GiST(a, c); -- geometry type
CREATE INDEX tbl_bc_gin_idx ON tbl USING GIN(b, c);
आप integer
जोड़ सकते हैं कॉलम c
या तो या दोनों को। यह निर्भर करता है। उसके लिए, आपको btree_gin
. की आवश्यकता होगी या btree_gist
या दोनों, क्रमशः।