मुझे नहीं पता कि पीजी एक बिटमैप इंडेक्स स्कैन के साथ एक जीआईएसटी इंडेक्स और नियमित बी-ट्री इंडेक्स को जोड़ सकता है, लेकिन मुझे संदेह नहीं है। आपको 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 एक बिटमैप अनुक्रमणिका स्कैन का उपयोग करके दो स्वतंत्र अनुक्रमणिकाओं को संयोजित कर सकता है।