दिलचस्प पोस्ट
अच्छा जावा ग्राफ एल्गोरिथ्म पुस्तकालय? क्या आप std :: सूची से तत्वों को निकाल सकते हैं, जबकि इसके माध्यम से चलते हैं? जी ++ में प्रोफ़ाइल निर्देशित अनुकूलन का उपयोग कैसे करें? चर का गणितीय ऑपरेटर के साथ jQuery if बयान Android http कनेक्शन अपवाद कैसे एक ArrayList () विधि वस्तुओं का मूल्यांकन करता है? सी ++ द्वारा कॉल करने के लिए मैं पायथन में सी ++ क्लास कैसे लागू कर सकता हूं? Android के साथ एक लंबी प्रेस का पता लगा रहा है आईई 9 कॉल्स के साथ jQuery के AJAX रिटर्न "प्रवेश निषेध है" $ Http के लिए कोयरी आईई कैशिंग समस्या प्रवेश IE पर jQuery के स्क्रिप्ट पर खारिज कर दिया jQuery के AJAX सफलता कॉलबैक फ़ंक्शन परिभाषा Mockito – doReturn (और) के बीच का अंतर () एंड्रॉइड पर जावा का उपयोग कर एक पीडीएफ फाइल प्रस्तुत करें जांचें कि संख्या पूर्णांक है या नहीं

मैं किसी विशिष्ट सूचकांक का उपयोग करने के लिए पोस्टग्रेस को कैसे लागू कर सकता हूं?

मैं पोस्टग्रेस को किसी सूचकांक का उपयोग करने के लिए कैसे बाध्य कर सकता हूँ जब यह अनुक्रमिक स्कैन करने पर जोर देगी?

वेब के समाधान से एकत्रित समाधान "मैं किसी विशिष्ट सूचकांक का उपयोग करने के लिए पोस्टग्रेस को कैसे लागू कर सकता हूं?"

यह सोचते हुए कि आप कई डेटाबेस में पाए जाने वाले सामान्य "सूचकांक हिंटिंग" सुविधा के बारे में पूछ रहे हैं, PostgreSQL ऐसी सुविधा प्रदान नहीं करता है पोस्टग्रे एसक्यूएल टीम द्वारा किए गए यह एक सचेत निर्णय था एक अच्छा अवलोकन और इसके बजाय आप यहां क्या कर सकते हैं। कारण मूल रूप से यह है कि यह एक प्रदर्शन हैक जो आपके डेटा में परिवर्तन के रूप में लाइन के नीचे अधिक समस्याएं पैदा करता है, जबकि PostgreSQL के अनुकूलक आंकड़ों के आधार पर योजना का पुन: मूल्यांकन कर सकता है। दूसरे शब्दों में, आज जो अच्छी क्वेरी प्लान हो सकती है शायद सभी समय के लिए एक अच्छी क्वेरी योजना नहीं होगी, और सूचकांक संकेत सभी समय के लिए किसी विशेष क्वेरी योजना को बल देते हैं।

एक बहुत कुंद हथौड़ा के रूप में, परीक्षण के लिए उपयोगी, आप enable_seqscan और enable_indexscan मापदंडों का उपयोग कर सकते हैं। देख:

  • सूचकांक उपयोग की जांच करना
  • enable_ पैरामीटर

ये चालू उत्पादन उपयोग के लिए उपयुक्त नहीं हैं । यदि आपके पास क्वेरी प्लान विकल्प के साथ समस्याएं हैं, तो आपको क्वेरी निष्पादन समस्याओं को ट्रैक करने के लिए दस्तावेज़ देखना चाहिए। न केवल enable_ पैरामीटर और दूर चलें।

जब तक आपके पास इंडेक्स का उपयोग करने का कोई बहुत अच्छा कारण नहीं है, तो पोस्टग्रेज़ सही विकल्प बना रहे होंगे। क्यूं कर?

  • छोटे तालिकाओं के लिए, अनुक्रमिक स्कैन करने के लिए यह तेज़ है।
  • पोस्टग्रे इंडेक्सेस का उपयोग नहीं करते हैं, जब डेटाटाइप ठीक से मेल नहीं खाते, आपको उचित डाट शामिल करने की आवश्यकता हो सकती है।
  • आपके प्लानर सेटिंग से समस्या हो सकती है

यह पुराना समाचार समूह पोस्ट भी देखें

संभवतया उपयोग करने का एकमात्र वैध कारण

 set enable_seqscan=false 

जब आप प्रश्नों को लिख रहे हैं और जल्दी से देखना चाहते हैं कि क्वेरी योजना क्या वास्तव में होगी, तालिका (ओं) में बड़ी मात्रा में आंकड़े हैं या ज़रूरी है कि अगर आपको जल्दी से इसकी पुष्टि करने की ज़रूरत है कि आपकी क्वेरी किसी इंडेक्स का उपयोग नहीं कर रही है, क्योंकि डेटासेट बहुत छोटा है।

खुद पर सवाल बहुत अवैध है (उदाहरण के लिए enable_seqscan = off करके) मजबूर करना बहुत बुरा विचार है यह जांचना उपयोगी हो सकता है कि यह तेज़ हो जाएगा, लेकिन उत्पादन कोड को कभी भी ऐसी युक्तियों का उपयोग नहीं करना चाहिए।

इसके बजाय – अपनी क्वेरी का विश्लेषण करने, इसे पढ़ें, और पता करें कि PostgreSQL खराब (आपकी राय में) योजना का चुनाव क्यों करता है

वेब पर ऐसे उपकरण हैं जो पढ़ने में मदद करते हैं, विश्लेषण का विश्लेषण करते हैं – उनमें से एक explain.depesz.com – मेरे द्वारा लिखित है I

एक और विकल्प है फ़ॉरेनोड आईआरसी नेटवर्क पर # पोस्टग्रेसकॉल चैनल में शामिल होने और आपकी मदद करने के लिए वहां लोगों से बात करना – जैसा कि अनुकूलन क्वेरी "एक सवाल पूछे, उत्तर पाने के लिए खुश रहें" का मामला नहीं है। यह अधिक वार्तालाप की तरह है, कई चीजों की जांच करने के लिए, बहुत सी बातें सीखा जाए

कभी-कभी PostgreSQL एक विशेष स्थिति के लिए अनुक्रमित का सबसे अच्छा विकल्प बनाने में विफल रहता है। एक उदाहरण के रूप में, मान लीजिए कि कई लाख पंक्तियों के साथ एक लेनदेन तालिका है, जिनमें से किसी भी दिन के लिए कई सौ हैं, और तालिका में चार अनुक्रमित हैं: transaction_id, client_id, तिथि, और विवरण। आप निम्न क्वेरी को चलाने के लिए चाहते हैं:

 SELECT client_id, SUM(amount) FROM transactions WHERE date >= 'yesterday'::timestamp AND date < 'today'::timestamp AND description = 'Refund' GROUP BY client_id 

पोस्टग्रेएसक्यूएल, लेनदेन_डेटा_एडक्स के बजाय इंडेक्स लेन-देन_निर्देशिका_एडक्स का उपयोग करना चुन सकता है, जो एक से कम सेकेंड की बजाय कई मिनट लेते हुए क्वेरी के कारण हो सकता है। यदि यह मामला है, तो आप इस तरह की शर्त को फ्यूज करके तिथि को सूचकांक का उपयोग करने के लिए मजबूर कर सकते हैं:

 SELECT client_id, SUM(amount) FROM transactions WHERE date >= 'yesterday'::timestamp AND date < 'today'::timestamp AND description||'' = 'Refund' GROUP BY client_id 

एंटरप्राइज़डीबी का पोस्टग्रेस्प्लेस एडवांस सर्वर उत्पाद ओरेकल संकेत वाक्यविन्यास का समर्थन करता है, यद्यपि यह उत्पाद निःशुल्क नहीं है।

सबक्जरी में एक OFFSET 0 जोड़कर एक सेक्सेकैन पसंद करने के लिए पोस्टग्रेज़ को पुश करने के लिए एक टिक है

जब आप वास्तव में केवल n मुट्ठी / आखिरी तत्वों की तलाश कर रहे होते हैं तो बड़े / विशाल तालिकाओं को जोड़ने के अनुरोधों को अनुकूलित करने के लिए यह आसान है

कहते हैं कि आप पहले / पिछले 20 तत्वों को देख रहे हैं जिसमें 100k (या अधिक) प्रविष्टियां हैं, जिसमें कोई भी बिन्दु बिन्दु नहीं है / सभी क्वेरी के साथ सभी डेटा को जोड़ने से पहले, जब आप 100 या 1000 में देख रहे हैं प्रविष्टियों। उदाहरण के लिए इस परिदृश्य में, अनुक्रमिक स्कैन करने के लिए यह 10x से अधिक तेज हो जाता है।

देखें कि मैं कैसे एक पोस्टकॉर्स को एक subquery inlining से रोक सकता है?