अनुकूलन के ILIKE क्वेरी पर बाईं बाहरी में शामिल होने रिश्तों

0

सवाल

बहुत नया करने के लिए postgres और लगता है, यहाँ एक मुद्दा है और मैं नहीं हूँ यकीन है कि जो दिशा में जाने के लिए.

मैं एक क्वेरी पैदा कर रहा है कि कुछ प्रदर्शन के मुद्दों और मैं बाहर काम नहीं कर सकता कैसे यह अनुकूलन करने के लिए.

क्वेरी वास्तव में काफी आसान है:

SELECT transactions.* FROM transactions
LEFT OUTER JOIN companies ON "companies"."id" = "transactions"."company_id"
WHERE companies.code ILIKE '%777%'
ORDER BY transactions.id desc LIMIT 10

मैं खोजने के लिए चाहते हैं कि सभी लेनदेन के लिए कर रहे हैं एक कंपनी है कि 777 नाम में. वहाँ के आसपास हैं 20million लेनदेन डेटाबेस में और चारों ओर 200 कंपनियों.

क्वेरी वर्तमान में गुना से बाहर है, भले ही हम एक सीमा होती है 10. मैं इस पर विश्वास है क्योंकि ILIKE नहीं है का उपयोग कर एक सूचकांक है, तो यह बुरी तरह से धीमी है.

यह एक उदाहरण जहां आप कर सकते हैं जोड़ने के लिए चाहते हैं, जहां फिल्टर करने के लिए शामिल होने के बजाय? मैं यह परीक्षण किया है और यह काम करता है बिजली-त्वरित अगर एक रिकॉर्ड पाया जाता है. यदि कोई रिकॉर्ड नहीं पाया जाता है, इसे फिर से है ।

वहाँ एक प्रकार के सूचकांक में हम पर लग जाना चाहिए होता है, जो गति में सुधार यहाँ?

2
0

आप की कोशिश कर सकते हैं एक हालत मौजूद है के रूप में आप की जरूरत नहीं है किसी भी कॉलम कंपनियों से तालिका:

SELECT tr.* 
FROM transactions tr
WHERE exists (select *  
              from companies c 
              where c.id = tr.company_id 
                and c.code ILIKE '%777%')
ORDER BY tr.id desc 
LIMIT 10

लेकिन अंत में, order by शायद टोंटी यहाँ. यदि उदाहरण के लिए 10 लाख लेनदेन लौट रहे हैं, तो छँटाई उन 10 लाख पंक्तियों में कुछ समय लगेगा.

2021-11-17 15:46:23

इसी तरह के व्यवहार के साथ सबक्वेरी. समय बाहर के बाद, 30 सेकंड के लिए पर पढ़ें प्रतिकृति. अगर मैं दूर ILIKE अपनी संपूर्णता में इस प्रणाली मुझे रिटर्न 10 पंक्तियों के साथ बहुत जल्दी द्वारा आदेश.
Afrodog
0

एक EXPLAIN क्वेरी के मददगार होगा. उस ने कहा, मुझे नहीं लगता कि ILIKE है bottlenecking यहाँ आप बल्कि एक स्कैन पर लेनदेन की मेज. द्वारा पीछा किया, एक संभावित बड़े ORDER BY छँटाई आपरेशन

हालांकि (मुझे लगता है) प्रणाली है पहले से ही यह कर देखते है, चलो विभाजन functionalities और बल की कार्रवाई के आदेश मैन्युअल रूप से एक का उपयोग करके (अनुक्रमित) temptable.

की तर्ज साथ कुछ इस:

SELECT id
  INTO TEMPORARY TABLE matching_companies
  FROM companies 
 WHERE companies.code ILIKE '%777%';
 
CREATE UNIQUE INDEX idx_matching_companies_id ON matching_companies (id);

SELECT t.* 
  FROM transactions t
  JOIN matching_companies c
    ON c."id" = t."company_id"
ORDER BY t.id desc LIMIT 10;

यह मानते हुए कुछ कंपनियों के मैच 777-आवश्यकता है, यह प्रकाश लाता है कि एक सूचकांक पर लेनदेन की मेज पर company_id काम में आ जाना चाहिए यहाँ.

मैं नहीं होगा भी आश्चर्य तो बस जोड़ने के सूचकांक में हो सकता है पहले से ही अपने मूल क्वेरी क्योंकि IMHO प्रणाली विभाजन क्वेरी में बहुत ज्यादा एक ही आपरेशन (शून्य से idx_matching_companies_id हो सकता है)

2021-11-18 13:02:07

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में