इस पुनर्लेखित संस्करण का प्रयास करें:
SELECT fat.*
FROM Table1 fat
JOIN conciliacao_vendas cv USING (empresa_id, chavefato, rede_id)
JOIN loja lj ON lj.id = fat.loja_id
JOIN rede rd ON rd.id = fat.rede_id
JOIN bandeira bd ON bd.id = fat.bandeira_id
JOIN produto pd ON pd.id = fat.produto_id
JOIN loja_extensao le ON le.id = fat.loja_extensao_id
JOIN conta ct ON ct.id = fat.conta_id
JOIN banco bc ON bc.id = ct.banco_id
LEFT JOIN modo_captura mc ON mc.id = fat.modo_captura_id
WHERE cv.controle_upload_arquivo_id = 6906
AND fat.parcela = 1
ORDER BY fat.data_venda, fat.data_credito
LIMIT 20;
ज्वाइन सिंटैक्स और जॉइन का क्रम
विशेष रूप से मैंने भ्रामक LEFT JOIN
को ठीक किया है करने के लिए conciliacao_vendas
, जो एक सादे [INNER] JOIN
. के रूप में कार्य करने के लिए मजबूर है बाद में WHERE
. द्वारा वैसे भी हालत। इससे क्वेरी प्लानिंग को सरल बनाना चाहिए और प्रक्रिया में पहले की पंक्तियों को खत्म करने की अनुमति देनी चाहिए, जिससे सब कुछ बहुत सस्ता हो जाए। विस्तृत विवरण के साथ संबंधित उत्तर:
USING
सिर्फ एक वाक्यात्मक आशुलिपि है।
चूंकि क्वेरी में कई टेबल शामिल हैं और फिर से लिखी गई क्वेरी टेबल में शामिल होने का क्रम अब इष्टतम है, आप इसे SET LOCAL join_collapse_limit = 1
के साथ फाइन-ट्यून कर सकते हैं। ओवरहेड प्लानिंग को बचाने और निम्न क्वेरी योजनाओं से बचने के लिए। एकल लेन-देन में चलाएं :
BEGIN;
SET LOCAL join_collapse_limit = 1;
SELECT ...; -- read data here
COMMIT; -- or ROOLBACK;
इसके बारे में अधिक जानकारी:
- PostgreSQL में कार्डिनैलिटी अनुमान त्रुटि दिखाने के लिए नमूना क्वेरी
- योजनाकार को स्पष्ट रूप से नियंत्रित करने पर बढ़िया मैनुअल क्लाज में शामिल हों
सूचकांक
विशेष रूप से (आपकी क्वेरी योजना से लिया गया) बहुत सारे या पंक्तियों के साथ लुकअप टेबल पर कुछ इंडेक्स जोड़ें (केवल कुछ दर्जनों के लिए जरूरी नहीं):
यह विशेष रूप से अजीब है, क्योंकि वे कॉलम प्राथमिक कुंजी कॉलम . की तरह दिखते हैं और पहले से ही होना चाहिए एक सूचकांक ...
तो:
CREATE INDEX conta_pkey_idx ON public.conta (id);
CREATE INDEX loja_pkey_idx ON public.loja (id);
CREATE INDEX loja_extensao_pkey_idx ON public.loja_extensao (id);
इसे वास्तव में मोटा बनाने के लिए, एक बहु-स्तंभ अनुक्रमणिका बहुत अच्छी सेवा होगी:
CREATE INDEX foo ON Table1 (parcela, data_venda, data_credito);