मैंने आपकी क्वेरी योजना clear.depesz.com पर पोस्ट की है, एक नज़र डालें।
कुछ जगहों पर क्वेरी प्लानर के अनुमान बहुत गलत हैं। क्या आपने ANALYZE
चलाया है हाल ही में?
नियोजक और नियोजक लागत स्थिरांक द्वारा प्रयुक्त सांख्यिकी पर मैनुअल में अध्याय पढ़ें। random_page_cost
. के अध्यायों पर विशेष ध्यान दें और default_statistics_target
.
आप कोशिश कर सकते हैं:
ALTER TABLE diplomas ALTER COLUMN number SET STATISTICS 1000;
ANALYZE diplomas;
या 10M पंक्तियों वाली तालिका के लिए और भी ऊपर जाएं। यह डेटा वितरण और वास्तविक क्वेरी . पर निर्भर करता है . प्रयोग। डिफ़ॉल्ट 100 है, अधिकतम 10000 है।
उस आकार के डेटाबेस के लिए, केवल 1 या 5 एमबी work_mem
आम तौर पर पर्याप्त नहीं हैं। ट्यूनिंग पोस्टग्रेज पर पोस्टग्रेज विकी पेज पढ़ें जिससे @aleroot जुड़ा हुआ है।
चूंकि आपकी क्वेरी को डिस्क पर 43104kB मेमोरी की आवश्यकता है EXPLAIN
. के अनुसार आउटपुट, आपको work_mem
. सेट करना होगा 500MB . जैसा कुछ करने के लिए या अधिक इन-मेमोरी सॉर्टिंग की अनुमति देने के लिए। डेटा के इन-मेमोरी प्रतिनिधित्व को ऑन-डिस्क प्रतिनिधित्व की तुलना में कुछ अधिक स्थान की आवश्यकता होती है। टॉम लेन ने हाल ही में उस मामले पर जो पोस्ट किया है उसमें आपकी रुचि हो सकती है।
बढ़ाना work_mem
बस थोड़ा सा, जैसे आपने कोशिश की, बहुत मदद नहीं करेगा या धीमा भी कर सकता है। इसे विश्व स्तर पर उच्च पर सेट करना भी चोट पहुंचा सकता है, खासकर समवर्ती पहुंच के साथ। संसाधनों के लिए एकाधिक सत्र एक दूसरे को भूखा रख सकते हैं। यदि संसाधन सीमित है तो एक उद्देश्य के लिए अधिक आवंटन दूसरे से स्मृति को हटा देता है। सबसे अच्छा सेटअप पूरी स्थिति पर निर्भर करता है।
साइड इफेक्ट से बचने के लिए, इसे अपने सत्र में केवल स्थानीय स्तर पर और अस्थायी रूप से क्वेरी के लिए पर्याप्त रूप से सेट करें:
SET work_mem = '500MB';
इसे बाद में अपने डिफ़ॉल्ट पर रीसेट करें:
RESET work_mem;
या SET LOCAL
. का उपयोग करें इसे केवल वर्तमान लेनदेन के लिए शुरू करने के लिए सेट करने के लिए।