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

कौन सा अधिक कुशल स्मॉलिंट या कैरेक्टर(10) है?

मैं कहूंगा कि एक कृत्रिम smallint जोड़ना यदि तालिका को सावधानीपूर्वक डिज़ाइन किया गया है, तो भंडारण स्थान के मामले में प्राथमिक कुंजी सस्ती होगी।

एक smallint 2 बाइट्स लेता है, जबकि एक character(10) (जो, प्रति-सहज रूप से, एक varlena . है ) ASCII वर्ण युक्त, 14 बाइट्स की खपत करेगा।

तालिका में, अतिरिक्त 2 बाइट बेकार हो जाएंगे, लेकिन यह न भूलें कि आपके पास प्राथमिक कुंजी कॉलम पर एक अनुक्रमणिका होगी। तो अनुक्रमित मान वास्तव में दो बार संग्रहीत किया जाएगा:एक बार तालिका में, एक बार अनुक्रमणिका में।

सादगी के लिए, आइए टपल हेडर और अन्य ओवरहेड को अनदेखा करें।

  • ISBN को प्राथमिक कुंजी के रूप में उपयोग करने पर प्रति तालिका पंक्ति में अतिरिक्त 14 बाइट खर्च होंगे।

  • एक smallint जोड़ना प्राथमिक कुंजी तालिका में दो बाइट्स और इंडेक्स में दो बाइट्स जोड़ देगी, जिससे कुल चार अतिरिक्त बाइट बन जाएंगे।

तो एक smallint जोड़ना प्राथमिक कुंजी को स्थान बचाना चाहिए

आपको संरेखण के मुद्दों को अनदेखा नहीं करना चाहिए। सभी डेटा प्रकार स्मृति पते पर संग्रहीत होते हैं जो दो की कुछ शक्तियों के गुणक होते हैं। यह प्रोसेसर के आर्किटेक्चर द्वारा आवश्यक है। एक smallint आमतौर पर संरेखण 2, character . होता है संरेखण 1 है, जबकि उदाहरण के लिए timestamp संरेखण 8 है।

इसलिए यदि आपकी तालिका को इस रूप में परिभाषित किया गया है

CREATE TABLE book (
   id smallint PRIMARY KEY,
   issue_time timestamp with time zone,
   isbn character(10)
);

तब तालिका डेटा इस तरह दिखेगा:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |X|X|X|X|X|X| | | | | | | | | ... (ISBN omitted)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 id    padding     issue_time

पंक्ति 8-बाइट सीमा पर संरेखित है, और अंत से छह बाइट्स यदि id . है issue_time . की शुरुआत तक खाली "पैडिंग बाइट्स" होगा।

इसलिए इसका अधिकतम लाभ उठाने के लिए, आपको यह विचार करना होगा कि आप कॉलम को किस क्रम में परिभाषित करते हैं।

यह सब वास्तविकता में बहुत प्रासंगिक क्यों नहीं है:

5000 या 10000 प्रविष्टियों वाली एक तालिका छोटी होती है, चाहे कुछ भी हो।

हालांकि यहां स्थान को अनुकूलित करने पर खर्च किया गया कोई भी सबसे अच्छा अनावश्यक सूक्ष्म अनुकूलन है।

लेकिन नियोजन तालिका पर एक स्मार्ट विचार क्या हो सकता है बाद में आसानी से उलटा पड़ सकता है:यदि - आपकी अपेक्षा से भिन्न - आप तालिका में 70000 पुस्तकों को संग्रहीत करना चाहते हैं, तो आप पाएंगे कि एक smallint पर्याप्त नहीं होगा, भले ही आप नकारात्मक id . की अनुमति दें एस। जब आपको प्राथमिक कुंजी के डेटा प्रकार को बदलना होगा और लाइव सिस्टम में इसे संदर्भित करने वाली सभी विदेशी कुंजियों को बदलना होगा, तो आपको चतुर अनुकूलन द्वारा लगभग 100 केबी बचाने से मिलने वाली किसी भी खुशी से कहीं अधिक दर्द होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब डेटाबेस रिकॉर्ड को पोस्टग्रेज करने के लिए लिखा जाता है, तो शेल स्क्रिप्ट चलाएँ

  2. डुप्लिकेट प्रविष्टियों को कैसे हटाएं?

  3. समूहन/एकत्रीकरण के दौरान सरणी मानों को संयोजित/मर्ज करें

  4. वे मान खोजें जिनमें PostgreSQL में संख्याएँ नहीं हैं

  5. खाली या शून्य मान की जांच करने का सबसे अच्छा तरीका