मुझे नहीं पता कि पीजी एक बिटमैप इंडेक्स स्कैन के साथ एक जीआईएसटी इंडेक्स और नियमित बी-ट्री इंडेक्स को जोड़ सकता है, लेकिन मुझे संदेह नहीं है। आपको user_id . जोड़े बिना सबसे अच्छा परिणाम मिल सकता है कॉलम आपके जिस्ट इंडेक्स में (और परिणामस्वरूप इसे अन्य प्रश्नों के लिए बड़ा और धीमा बना देता है जो user_id का उपयोग नहीं करते हैं )।
एक प्रयोग के रूप में आप:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
जिसके परिणामस्वरूप एक बड़ा सूचकांक होने की संभावना है, लेकिन उस क्वेरी को बढ़ावा दे सकता है - अगर यह काम करता है। ध्यान रखें कि इस तरह के इंडेक्स को बनाए रखने से INSERT काफ़ी धीमा हो जाएगा और UPDATE एस। अगर आप पुराने ix_coords को छोड़ देते हैं आपके प्रश्न ix_coords_and_user_id . का उपयोग करेंगे भले ही वे user_id . पर फ़िल्टर न करें , लेकिन यह ix_coords . से धीमा होगा . दोनों को रखने से INSERT बन जाएगा और UPDATE मंदी और भी खराब।
देखें btree-gist
(प्रश्न को संपादित करके अप्रचलित जो प्रश्न को पूरी तरह से बदल देता है; जब लिखा जाता है कि उपयोगकर्ता के पास एक बहु-स्तंभ अनुक्रमणिका थी, तो वे अब दो अलग-अलग में विभाजित हो गए हैं ):
ऐसा लगता है कि आप user_id . को फ़िल्टर या सॉर्ट नहीं कर रहे हैं , केवल create_date . Pg (user_id, create_date) जैसे बहु-स्तंभ अनुक्रमणिका के केवल दूसरे पद का उपयोग नहीं करेगा (नहीं कर सकता?) , इसे पहली वस्तु के उपयोग की भी आवश्यकता है।
अगर आप create_date को इंडेक्स करना चाहते हैं , इसके लिए एक अलग अनुक्रमणिका बनाएं। यदि आप (user_id, create_date) . का उपयोग करते हैं और इसकी आवश्यकता है अनुक्रमणिका और आम तौर पर केवल user_id का उपयोग न करें अकेले, देखें कि क्या आप कॉलम ऑर्डर को उलट सकते हैं। वैकल्पिक रूप से दो स्वतंत्र इंडेक्स बनाएं, (user_id) और (create_date) . जब दोनों स्तंभों की आवश्यकता होती है तो Pg एक बिटमैप अनुक्रमणिका स्कैन का उपयोग करके दो स्वतंत्र अनुक्रमणिकाओं को संयोजित कर सकता है।