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

PostgreSQL में अभिव्यक्ति अनुक्रमणिका की व्यावहारिक सीमाएँ

मैंने कभी hstore के साथ नहीं खेला है, लेकिन जब मुझे EAV कॉलम की आवश्यकता होती है, तो मैं कुछ ऐसा ही करता हूं, जैसे:

create index on product_eav (eav_value) where (eav_type = 'int');

ऐसा करने में सीमा यह है कि इसका उपयोग करने के लिए आपको अपनी क्वेरी में स्पष्ट होना चाहिए, यानी यह क्वेरी उपरोक्त इंडेक्स का उपयोग नहीं करेगी:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size;

लेकिन यह होगा:

select product_id
from product_eav
where eav_name = 'size'
and eav_value = :size
and type = 'int';

आपके उदाहरण में इसे और अधिक पसंद किया जाना चाहिए:

create index on product ((data->'size')::int) where (data->'size' is not null);

जब कोई आकार प्रविष्टि न हो तो इसे अनुक्रमणिका में संदर्भ जोड़ने से बचना चाहिए। आपके द्वारा उपयोग किए जा रहे PG संस्करण के आधार पर क्वेरी को इस प्रकार संशोधित करने की आवश्यकता हो सकती है:

select product_id
from products
where data->'size' is not null
and data->'size' = :size;

नियमित और आंशिक सूचकांक के बीच एक और बड़ा अंतर यह है कि बाद वाला एक तालिका परिभाषा में एक अद्वितीय बाधा को लागू नहीं कर सकता है। यह सफल होगा:

create unique index foo_bar_key on foo (bar) where (cond);

निम्नलिखित नहीं होगा:

alter table foo add constraint foo_bar_key unique (bar) where (cond);

लेकिन यह होगा:

alter table foo add constraint foo_bar_excl exclude (bar with =) where (cond);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_trgm . के साथ 300 मिलियन पतों में खोजें

  2. तालिका उपयोगकर्ताओं को नहीं छोड़ सकता क्योंकि अन्य वस्तुएं इस पर निर्भर करती हैं

  3. पहली तालिका में विदेशी कुंजी

  4. समय क्षेत्र के साथ अंतिम दैनिक शून्य नहीं मान चुनें

  5. कुल चलने वाली रोलिंग अवधि कैसे बनाएं