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

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

स्पष्टता के लिए अपनी क्वेरी योजना को पुन:स्वरूपित करना:

QUERY PLAN Aggregate (cost=126377.96..126377.97 rows=1 width=0)
  -> Hash Join (cost=6014.51..126225.38 rows=61033 width=0)
     Hash Cond: (contacts_lists.contact_id = plain_contacts.contact_id)
    -> Hash Join (cost=3067.30..121828.63 rows=61033 width=8)
       Hash Cond: (contacts_lists.contact_id = contacts.id)
      -> Index Scan using index_contacts_lists_on_list_id_and_contact_id
         on contacts_lists (cost=0.00..116909.97 rows=61033 width=4)
         Index Cond: (list_id = 66996)
         -> Hash (cost=1721.41..1721.41 rows=84551 width=4)
         -> Seq Scan on contacts (cost=0.00..1721.41 rows=84551 width=4)
            Filter: ((NOT email_bad) AND (NOT email_unsub))
            -> Hash (cost=2474.97..2474.97 rows=37779 width=4)
            -> Seq Scan on plain_contacts (cost=0.00..2474.97 rows=37779 width=4)
               Filter: has_email

दो आंशिक अनुक्रमणिका हो सकता है अपने डेटा वितरण के आधार पर seq स्कैन को समाप्त करें:

-- if many contacts have bad emails or are unsubscribed:
CREATE INDEX contacts_valid_email_idx ON contacts (id)
WHERE (NOT email_bad AND NOT email_unsub);

-- if many contacts have no email:
CREATE INDEX plain_contacts_valid_email_idx ON plain_contacts (id)
WHERE (has_email);

हो सकता है कि आप किसी विदेशी कुंजी पर एक अनुक्रमणिका खो रहे हों:

CREATE INDEX plain_contacts_contact_id_idx ON plain_contacts (contact_id);

अंतिम लेकिन कम से कम यदि आपने कभी अपने डेटा का विश्लेषण नहीं किया है, तो आपको चलाने की आवश्यकता है:

VACUUM ANALYZE;

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी अन्य तालिका से यादृच्छिक डेटा पॉप्युलेट करें

  2. SQL के साथ Postgres db 8.1 में सभी अनुक्रमों को सूचीबद्ध करें

  3. रेल पोस्टग्रेज - Jsonb कॉलम क्वेरी

  4. मैं postgresql में किसी तालिका से एकल उद्धरण कैसे निकालूं?

  5. बल्क अपडेट और डिलीट ऑपरेशन करते समय PostgreSQL गतिरोध से बचना