यदि आपके पास केवल कुछ ही भूमिकाएँ हैं, तो आप कोई संग्रहण . भी नहीं सहेजते हैं PostgreSQL . में स्थान . एक integer
कॉलम 4 बाइट्स का उपयोग करता है, एक bigint
8 बाइट्स। दोनों को संरेखण पैडिंग की आवश्यकता हो सकती है:
- पंक्तियों के आकार को पोस्टग्रेज करना समझ में आता है
- PostgreSQL में स्थान की गणना और बचत करना
एक boolean
कॉलम 1 बाइट का उपयोग करता है। प्रभावी रूप से, आप एक integer
. के लिए चार या अधिक बूलियन कॉलम फ़िट कर सकते हैं bigint
. के लिए कॉलम, आठ या अधिक ।
यह भी ध्यान रखें कि NULL
NULL बिटमैप में मान केवल एक बिट (सरलीकृत) का उपयोग करते हैं।
अलग-अलग कॉलम पढ़ने में आसान होते हैं और इंडेक्स . दूसरों ने उस पर पहले ही टिप्पणी कर दी है।
इंडेक्स ("गैर-सरगने योग्य") के साथ समस्याओं को रोकने के लिए आप अभी भी अभिव्यक्तियों या आंशिक अनुक्रमणिका पर अनुक्रमणिका का उपयोग कर सकते हैं। सामान्यीकृत कथन जैसे:
<ब्लॉकक्वॉट>डेटाबेस इस तरह की क्वेरी पर अनुक्रमणिका का उपयोग नहीं कर सकता
या
<ब्लॉकक्वॉट>ये शर्तें गैर-SARGable हैं!
पूरी तरह से सच नहीं हैं - शायद कुछ अन्य लोगों के लिए आरडीबीएमएस में इन सुविधाओं की कमी है।
लेकिन जब आप पूरी तरह से समस्या से बच सकते हैं तो क्यों बचें?
जैसा कि आपने स्पष्ट किया है, हम 6 अलग-अलग प्रकारों (शायद अधिक) के बारे में बात कर रहे हैं। अलग-अलग boolean
. के साथ जाएं स्तंभ। आप शायद एक bigint
. की तुलना में जगह भी बचाएंगे . इस मामले में अंतरिक्ष की आवश्यकता महत्वहीन लगती है।
यदि ये झंडे परस्पर अनन्य थे , आप एक . का उपयोग कर सकते हैं प्रकार का स्तंभ enum
या एक छोटी लुक-अप तालिका और इसे संदर्भित करने वाली एक विदेशी कुंजी। (प्रश्न अद्यतन में खारिज कर दिया गया।)