-
इंडेक्स आमतौर पर सभी पंक्तियों के 90% पर संचालन के लिए बेकार हैं। अनुक्रमिक स्कैन किसी भी तरह से तेज़ होंगे। (विदेशी अपवाद लागू होते हैं।)
-
यदि आपको समवर्ती पढ़ने की अनुमति देने की आवश्यकता है, तो आप टेबल पर एक विशेष लॉक नहीं ले सकते। तो आप भी उसी लेन-देन में कोई अनुक्रमणिका नहीं छोड़ सकते।
-
आप कर सकते थे अनन्य लॉक की अवधि को कम से कम रखने के लिए अलग-अलग लेनदेन में इंडेक्स ड्रॉप करें। 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 आंशिक अनुक्रमणिका कर सकता है।