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

PostgreSQL आंशिक अनुक्रमणिका का उपयोग नहीं करता है

एक आंशिक अनुक्रमणिका एक अच्छा विचार है तालिका की आधी पंक्तियों को बाहर करने के लिए जिनकी आपको स्पष्ट रूप से आवश्यकता नहीं है। आसान:

CREATE INDEX name_idx ON table (text_col)
WHERE text_col IS NOT NULL;

ANALYZE table चलाना सुनिश्चित करें सूचकांक बनाने के बाद। (ऑटोवैक्यूम कुछ समय बाद स्वचालित रूप से ऐसा करता है यदि आप इसे मैन्युअल रूप से नहीं करते हैं, लेकिन यदि आप निर्माण के ठीक बाद परीक्षण करते हैं, तो आपका परीक्षण विफल हो जाएगा।)

फिर, क्वेरी प्लानर को यह समझाने के लिए कि एक विशेष आंशिक अनुक्रमणिका का उपयोग किया जा सकता है, WHERE दोहराएं क्वेरी में स्थिति - भले ही यह पूरी तरह से बेमानी लगती हो:

SELECT col1,col2, .. colN
FROM   table 
WHERE  text_col = 'my_value'
AND   text_col IS NOT NULL;  -- repeat condition

वोइला।

प्रति दस्तावेज़:

<ब्लॉककोट>

हालांकि, ध्यान रखें कि विधेय को उन प्रश्नों में प्रयुक्त शर्तों से मेल खाना चाहिए जो सूचकांक से लाभान्वित होने वाले हैं। सटीक रूप से, एक आंशिक अनुक्रमणिका का उपयोग किसी क्वेरी में केवल तभी किया जा सकता है जब सिस्टम यह पहचान सके कि WHERE क्वेरी की स्थिति गणितीय रूप से सूचकांक के विधेय को दर्शाती है। PostgreSQL में एक परिष्कृत प्रमेय कहावत नहीं है जो गणितीय रूप से समकक्ष अभिव्यक्तियों को पहचान सकता है जो विभिन्न रूपों में लिखे गए हैं। (न केवल इस तरह के एक सामान्य प्रमेय कहावत बनाना बेहद मुश्किल है, यह शायद किसी भी वास्तविक उपयोग के लिए बहुत धीमा होगा।) प्रणाली सरल असमानता के प्रभावों को पहचान सकती है, उदाहरण के लिए "x <1" का अर्थ "x <2" है; अन्यथा विधेय शर्त पूरी तरह से क्वेरी के WHERE . के हिस्से से मेल खानी चाहिए कंडीशन या इंडेक्स को प्रयोग करने योग्य नहीं माना जाएगा। मिलान क्वेरी प्लानिंग समय पर होता है, रन टाइम पर नहीं। परिणामस्वरूप, पैरामीटरयुक्त क्वेरी क्लॉज़ आंशिक अनुक्रमणिका के साथ काम नहीं करते हैं।

पैरामीटरयुक्त प्रश्नों के लिए:फिर से, आंशिक अनुक्रमणिका के (अनावश्यक) विधेय को एक अतिरिक्त, स्थिर WHERE के रूप में जोड़ें हालत, और यह ठीक काम करता है।

9.6 पोस्ट करें . में एक महत्वपूर्ण अपडेट केवल-अनुक्रमणिका स्कैन के अवसरों में काफी सुधार करता है (जो प्रश्नों को सस्ता बना सकता है और क्वेरी योजनाकार ऐसी क्वेरी योजनाओं को अधिक आसानी से चुनेगा)। संबंधित:

  • PostgreSQL गिनती के दौरान अनुक्रमणिका का उपयोग नहीं कर रहा है(*)


  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. क्वेरी में सम्मिलित JSON(B) कॉलम को मर्ज करना

  3. एन्कोडिंग UTF8 लोकेल en_US से मेल नहीं खाता; चुनी गई LC_CTYPE सेटिंग के लिए LATIN1 एन्कोडिंग की आवश्यकता होती है

  4. पोस्टग्रेस्क्ल में फ़ंक्शन, प्रक्रिया, ट्रिगर स्रोत कोड कैसे प्रदर्शित करें?

  5. Moodle PostgreSQL डेटाबेस को स्केल करने की चुनौतियाँ