PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्वेरी पोस्टग्रेज़ को ऑप्टिमाइज़ कैसे करें

इस पुनर्लेखित संस्करण का प्रयास करें:

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;

इसके बारे में अधिक जानकारी:

सूचकांक

विशेष रूप से (आपकी क्वेरी योजना से लिया गया) बहुत सारे या पंक्तियों के साथ लुकअप टेबल पर कुछ इंडेक्स जोड़ें (केवल कुछ दर्जनों के लिए जरूरी नहीं):

यह विशेष रूप से अजीब है, क्योंकि वे कॉलम प्राथमिक कुंजी कॉलम . की तरह दिखते हैं और पहले से ही होना चाहिए एक सूचकांक ...

तो:

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);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgadmin4 का उपयोग करके एक नया डेटाबेस नहीं बना सकता

  2. Postgres - 2 ARRAYs के प्रतिच्छेदन को वापस करने का कार्य?

  3. Postgresql 9.x:`xpath_exists` (XMLEXISTS) प्रश्नों को अनुकूलित करने के लिए अनुक्रमणिका

  4. तालिका डेटा देखने के लिए PostgreSql कमांड

  5. Postgresql संग्रहीत कार्यविधियों के लिए अलगाव स्तर सेट करें