कुछ मुद्दे सामने आते हैं:
सबसे पहले, पोस्टग्रेज के वर्तमान संस्करण में अपग्रेड करने पर विचार करें . लिखने के समय यह पीजी 9.6 या पीजी 10 (वर्तमान में बीटा) है। Pg 9.4 के बाद से GIN अनुक्रमणिका, अतिरिक्त मॉड्यूल pg_trgm और सामान्य रूप से बड़े डेटा के लिए कई सुधार हुए हैं।
इसके बाद, आपको और भी बहुत कुछ चाहिए RAM , विशेष रूप से एक उच्च work_mem
स्थापना। मैं इस लाइन से EXPLAIN
. में बता सकता हूं आउटपुट:
Heap Blocks: exact=7625 lossy=223807
"हानिकारक" बिटमैप हीप स्कैन . के विवरण में (आपके विशेष नंबरों के साथ) work_mem
. की भारी कमी को दर्शाता है . Postgres केवल पंक्ति सूचकों के बजाय बिटमैप अनुक्रमणिका स्कैन में ब्लॉक पते एकत्र करता है क्योंकि यह आपके कम work_mem
के साथ तेज़ होने की उम्मीद है सेटिंग (रैम में सटीक पते नहीं रख सकते)। निम्नलिखित बिटमैप हीप स्कैन में कई और गैर-योग्यता वाली पंक्तियों को फ़िल्टर करना होगा इस तरह। इस संबंधित उत्तर में विवरण है:
लेकिन work_mem
सेट न करें भी पूरी स्थिति पर विचार किए बिना उच्च:
अन्य समस्याएं हो सकती हैं, जैसे इंडेक्स या टेबल ब्लोट या अधिक कॉन्फ़िगरेशन बाधाएं। लेकिन अगर आप केवल इन दो मदों को ठीक करते हैं, तो क्वेरी बहुत होनी चाहिए पहले से तेज़।
साथ ही, क्या आपको वास्तव में उदाहरण में सभी 40k पंक्तियों को पुनर्प्राप्त करने की आवश्यकता है? आप शायद एक छोटा LIMIT
जोड़ना चाहते हैं क्वेरी के लिए और इसे "निकटतम-पड़ोसी" खोज बनाएं - इस मामले में एक जीआईएसटी इंडेक्स बेहतर विकल्प है, क्योंकि वह जीआईएसटी इंडेक्स के साथ तेज होना चाहिए। उदाहरण: