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

बार-बार उपयोग की जाने वाली तालिका से कई पंक्तियों को कैसे हटाएं

  1. इंडेक्स आमतौर पर सभी पंक्तियों के 90% पर संचालन के लिए बेकार हैं। अनुक्रमिक स्कैन किसी भी तरह से तेज़ होंगे। (विदेशी अपवाद लागू होते हैं।)

  2. यदि आपको समवर्ती पढ़ने की अनुमति देने की आवश्यकता है, तो आप टेबल पर एक विशेष लॉक नहीं ले सकते। तो आप भी उसी लेन-देन में कोई अनुक्रमणिका नहीं छोड़ सकते।

  3. आप कर सकते थे अनन्य लॉक की अवधि को कम से कम रखने के लिए अलग-अलग लेनदेन में इंडेक्स ड्रॉप करें। Postgres 9.2 या बाद के संस्करण में आप DROP INDEX CONCURRENTLY का भी उपयोग कर सकते हैं , जिसे केवल न्यूनतम तालों की आवश्यकता होती है। बाद में CREATE INDEX CONCURRENTLY . का उपयोग करें पृष्ठभूमि में अनुक्रमणिका को फिर से बनाने के लिए - और केवल एक बहुत ही संक्षिप्त अनन्य लॉक लें।

यदि आपके पास 10% (या कम) पंक्तियों की पहचान करने के लिए एक स्थिर स्थिति है, तो मैं एक आंशिक अनुक्रमणिका दोनों के लिए सर्वश्रेष्ठ पाने के लिए केवल उन पंक्तियों पर:

  • पढ़ने की क्वेरी हर समय (आंशिक अनुक्रमणिका का उपयोग करके) जल्दी से तालिका तक पहुंच सकती है।
  • बड़ा DELETE आंशिक अनुक्रमणिका को बिल्कुल भी संशोधित नहीं करेगा, क्योंकि DELETE में कोई भी पंक्ति शामिल नहीं है ।
CREATE INDEX foo (some_id) WHERE delete_flag = FALSE;

मान लें कि delete_flag boolean है . आपको यह सुनिश्चित करने के लिए अपने प्रश्नों में एक ही विधेय शामिल करना होगा (भले ही यह तार्किक रूप से बेमानी लगे) यह सुनिश्चित करने के लिए कि Postgres आंशिक अनुक्रमणिका कर सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL प्रतिकृति स्लॉट का उपयोग करना

  2. PostgreSQL array_agg क्रम

  3. आधिकारिक PostgreSQL Docker छवि की कॉन्फ़िगरेशन फ़ाइल को कैसे अनुकूलित करें?

  4. क्या तालिका को संशोधित करने का कोई सुरक्षित तरीका है pg_constraint ताकि कोई और जाँच न की जाए (अस्थायी रूप से)?

  5. पोस्टग्रेस्क्ल क्वेरी पर बड़ा परिणामसेट