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

डेटाबेस कॉलम में बिट फ़्लैग के लिए कोई नुकसान?

यदि आपके पास केवल कुछ ही भूमिकाएँ हैं, तो आप कोई संग्रहण . भी नहीं सहेजते हैं PostgreSQL . में स्थान . एक integer कॉलम 4 बाइट्स का उपयोग करता है, एक bigint 8 बाइट्स। दोनों को संरेखण पैडिंग की आवश्यकता हो सकती है:

  • पंक्तियों के आकार को पोस्टग्रेज करना समझ में आता है
  • PostgreSQL में स्थान की गणना और बचत करना

एक boolean कॉलम 1 बाइट का उपयोग करता है। प्रभावी रूप से, आप एक integer . के लिए चार या अधिक बूलियन कॉलम फ़िट कर सकते हैं bigint . के लिए कॉलम, आठ या अधिक ।

यह भी ध्यान रखें कि NULL NULL बिटमैप में मान केवल एक बिट (सरलीकृत) का उपयोग करते हैं।

अलग-अलग कॉलम पढ़ने में आसान होते हैं और इंडेक्स . दूसरों ने उस पर पहले ही टिप्पणी कर दी है।

इंडेक्स ("गैर-सरगने योग्य") के साथ समस्याओं को रोकने के लिए आप अभी भी अभिव्यक्तियों या आंशिक अनुक्रमणिका पर अनुक्रमणिका का उपयोग कर सकते हैं। सामान्यीकृत कथन जैसे:

<ब्लॉकक्वॉट>

डेटाबेस इस तरह की क्वेरी पर अनुक्रमणिका का उपयोग नहीं कर सकता

या

<ब्लॉकक्वॉट>

ये शर्तें गैर-SARGable हैं!

पूरी तरह से सच नहीं हैं - शायद कुछ अन्य लोगों के लिए आरडीबीएमएस में इन सुविधाओं की कमी है।
लेकिन जब आप पूरी तरह से समस्या से बच सकते हैं तो क्यों बचें?

जैसा कि आपने स्पष्ट किया है, हम 6 अलग-अलग प्रकारों (शायद अधिक) के बारे में बात कर रहे हैं। अलग-अलग boolean . के साथ जाएं स्तंभ। आप शायद एक bigint . की तुलना में जगह भी बचाएंगे . इस मामले में अंतरिक्ष की आवश्यकता महत्वहीन लगती है।

यदि ये झंडे परस्पर अनन्य थे , आप एक . का उपयोग कर सकते हैं प्रकार का स्तंभ enum या एक छोटी लुक-अप तालिका और इसे संदर्भित करने वाली एक विदेशी कुंजी। (प्रश्न अद्यतन में खारिज कर दिया गया।)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सरल Oracle क्वेरी:शाब्दिक प्रारूप स्ट्रिंग से मेल नहीं खाता

  2. तारीख को पार्स करने के बाद Oracle सेलेक्ट स्टेटमेंट से वापसी संख्या

  3. NLS_CHARSET_DECL_LEN () Oracle में फ़ंक्शन

  4. कारण क्यों ओरेकल केस संवेदनशील है?

  5. SQL क्वेरी में वैकल्पिक पैरामीटर को कैसे संभालें?