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

अभिव्यक्ति अनुक्रमणिका पर खोज रहे हैं

यह वैसे ही है जैसे आप jjanes से कहीं और पढ़ते हैं:एक अभिव्यक्ति अनुक्रमणिका केवल तभी मानी जाती है जब अभिव्यक्ति क्वेरी में सटीक रूप से मेल खाती है। Postgres क्वेरी प्लानर AI नहीं है। यदि प्रश्नों की योजना बनाने में बहुत अधिक समय लगता है तो यह शीघ्रता से प्रश्नों को बनाने के उद्देश्य को विफल कर देगा।

आप अपनी अनुक्रमणिका को थोड़ा सा अनुकूलित कर सकते हैं, यदि यह कोई सांत्वना है। left() substring() . की तुलना में सरल और तेज़ है :

CREATE INDEX record_changes_log_detail_old_value_ix_btree
ON record_changes_log_detail (left(old_value,1024) text_pattern_ops);

साथ ही, एक अधिकतम पंक्ति आकार 2704 बाइट्स . है btree अनुक्रमणिका के लिए, नहीं "बी-पेड़ों पर 2172 वर्ण सीमा"

सबसे महत्वपूर्ण बात, केवल समानता जांच के लिए, जैसा कि आपके प्रश्न से पता चलता है, md5(old_value) का उपयोग करके हैश मान पर एक btree अनुक्रमणिका या hashtext(old_value) बहुत होगा अधिक कुशल। यदि आप ऐसा करते हैं, तो हैश टकराव से बचाव करना न भूलें इस तरह:

SELECT *
FROM   record_changes_log_detail 
WHERE  hashtext(old_value) = hashtext('Gold Kerrison Neuro')
AND    old_value = 'Gold Kerrison Neuro';

पहला विधेय आपको तेज़ अनुक्रमणिका पहुँच प्रदान करता है। दूसरा झूठी सकारात्मक को बाहर करता है। टकराव अत्यंत दुर्लभ होना चाहिए। लेकिन संभव है। और संभावना तालिका के आकार के साथ बढ़ती है।

संबंधित:

  • ग्राफ़ के लिए तालिका-संरचना पर DISTINCT के साथ चयन क्वेरी बहुत धीमी है
  • MD5 फ़ील्ड के लिए इष्टतम डेटा प्रकार क्या है?
  • काउचडीबी में पूर्ण-पाठ खोज

या आप जैसा हैश इंडेक्स पहले से ही खुद पर विचार कर रहा है:

  • पोस्टग्रेज 11 हैश इंडेक्स इतना बड़ा क्यों है?

(यहां आपको हैश टकराव के बारे में चिंता करने की ज़रूरत नहीं है; आंतरिक रूप से संभाला जाता है।)




  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 के साथ डेटा एकीकरण

  3. जांचें कि क्या उपयोगकर्ता द्वारा परिभाषित प्रकार PostgreSQL में पहले से मौजूद है

  4. प्रति उपयोगकर्ता नवीनतम पंक्ति पुनर्प्राप्त करने के लिए क्वेरी द्वारा समूह अनुकूलित करें

  5. ST_DWithin पैरामीटर को डिग्री के रूप में लेता है, मीटर के रूप में नहीं, क्यों?