क्या 128/256/4096 बाइट ऑफसेट के लिए VARCHAR आकार का उपयोग करने का कोई कारण है?


14

डेटाबेस स्कीमा में, मैं अक्सर ध्यान देता हूं कि VARCHAR का आकार बाइट ऑफसेट 128/256 या 4096 तक होता है। मैंने इसे पहले भी किया है, और इसके पीछे का विचार शायद दक्षता के साथ कुछ था।

हालाँकि, ऐसा करने के लिए एक वैध कारण अभी भी है? मैं अक्सर इन दिनों VARCHAR के आकार के रूप में '50', '100' या '200' का उपयोग करता हूं, क्योंकि वे अधिक प्राकृतिक होते हैं और आमतौर पर उपयोगकर्ता को सत्यापन जांच में भी दिखाए जाते हैं।


2
पुराने प्रोग्रामर अक्सर दो की शक्तियों के साथ काम करने के लिए उपयोग किए जाते हैं, ताकि वे केवल 128/256/4096 अधिक प्राकृतिक पर विचार कर सकें। हो सकता है कि कोई भी परफॉरमेंस कारण ना हो।
Jan Hudec

1
चाहे कोई भी दक्षता लाभ हो, जिस पर व्यक्तिगत डेटाबेस का उपयोग किया जाता है। MySQL और DB2 को बहुत अलग तरीके से लागू किया गया है।
डेविड थॉर्नले

जवाबों:


13

एकमात्र तर्कसंगत स्पष्टीकरण जिसके बारे में मैं सोच सकता हूं: यदि DBMS किसी स्तंभ के मानों को क्रमिक रूप से संग्रहीत करता है, और आकार 2 की शक्ति तक गोल नहीं होते हैं, तो कुछ तत्वों को हार्ड पर दो पृष्ठों में "विभाजित" होना पड़ सकता है। ड्राइव (जैसे पेज n में पहले 10 बाइट्स और पेज n + 1 में अगले 40 बाइट्स), जो कुछ मामलों में एक के बजाय हार्ड ड्राइव से दो रीड तक ले जा सकता है।

अधिक संभावना @Jan Hudec की बात है कि, कई प्रोग्रामर "128" या "256" को "अच्छा राउंड नंबर" मानते हैं, जो उन्हें 137, 19 या 100 जैसे विषम संख्याओं की तुलना में अधिक प्राकृतिक विकल्प बनाता है।


2
"कई प्रोग्रामर 128 या 256 को अच्छा राउंड नंबर मानते हैं"। हम वास्तव में पूर्ण शैतान हैं। :-)
कोनामिमन

3
ध्यान दें कि आपको डेटा की लंबाई को स्टोर करने के लिए कम से कम एक बाइट की आवश्यकता होती है, इसलिए यदि आपका पहला स्पष्टीकरण सही था, तो हमें 31, 63, 127, 255 या 510 बाइट्स की बहुत सी सीमाएँ दिखाई देंगी।
dan04

1
लंबाई को इंगित करने के लिए 1 बाइट 255 (256 नहीं) वर्णों तक के स्ट्रिंग्स के लिए अनुमति देगा। SQL सर्वर, और मुझे लगता है कि अधिकांश अन्य सिस्टम दो बाइट्स का उपयोग करते हैं।
फिलिप केली

4

सामान्य तौर पर उन कॉलम की लंबाई का कोई कारण नहीं होता है। एक varchar (100) कॉलम बनाम एक varchar (128) कॉलम का कोई प्रदर्शन सुधार नहीं होगा।

हालाँकि, मैं उन डेटाबेस सिस्टम को दोगुना कर दूंगा जिनका उपयोग आप प्रतिबंध और अन्य विक्रेता विशिष्ट कैविएट पर आगे स्पष्टीकरण के लिए कर रहे हैं।

उदाहरण के लिए, यहाँ SQL सर्वर के लिए डेटाबेस सिस्टम प्रतिबंध का एक अच्छा उदाहरण है:

http://msdn.microsoft.com/en-us/library/ms186981.aspx

पंक्ति की कुल लंबाई व्यक्तिगत कॉलम की लंबाई से अधिक महत्वपूर्ण है।


3

मुझे याद नहीं है कि यह एक डीबीएमएस या कंपाइलर था, लेकिन मुझे याद है (एक लंबे समय पहले) सरणी और स्तंभ लंबाई के लिए 2 की शक्तियों का उपयोग करना सीखना। एक औचित्य यह था कि यह 'तेज' था क्योंकि कार्यान्वयन में बिट शिफ्टिंग का उपयोग किया जा सकता था। क्या यह सच है कि एक खुला सवाल है। किसी को भी इस पर कोई विचार है कि क्या यह अभी भी वैध है?

BTW मैंने कॉलम की चौड़ाई को यूनिफॉर्म नंबर b / c में स्थानांतरित कर दिया है, यह उपयोगकर्ताओं को बताने के लिए अजीब है कि चार सीमा 256 चर है।

और कुछ बहुत पुराने डेटाबेस ने आपको 256 चार-चौड़ाई वाले स्तंभों तक सीमित कर दिया।


2

यह वास्तव में वास्तव में मायने नहीं रखता है, क्योंकि आप वास्तव में केवल कुछ भंडारण दक्षता देखेंगे यदि आपकी पूरी पंक्ति का आकार 2 की शक्ति है। यह संभव है कि 2 की शक्तियों के साथ चिपके रहने से यह अधिक संभावना हो सकती है कि आपकी पंक्ति का आकार दो की शक्ति के लिए काम करेगा (क्योंकि अधिकांश देशी डेटा प्रकार, डेटाबेस के आधार पर [2-आकार के] होते हैं, लेकिन मैं इसे एक कठिन और तेज़ नियम नहीं बनाऊंगा।

यदि आप बड़े (4K या बड़े) कॉलम के साथ काम कर रहे थे, तो यह अधिक समझ में आता है, क्योंकि वे संभवतः अलग-अलग संग्रहीत किए जा सकते हैं, और उन्हें आकार दे सकते हैं ताकि वे एक स्टोरेज ब्लॉक के भीतर फिट हो जाएं (जो आपका डेटाबेस ऑन-डिस्क स्टोरेज के लिए उपयोग करता है) आप कुछ।


2

जबकि मैं सभी DBMS सिस्टम से परिचित नहीं हूं, Oracle में स्टोरेज की सबसे छोटी "भौतिक" इकाई एक "ब्लॉक" है जो डिफ़ॉल्ट रूप से 2KB है। अपने स्तंभों को दो की शक्तियों में आकार देने का अभ्यास भंडारण पंक्तियों में ठीक से फिट होने के लिए आपकी पंक्तियों को आकार देने का एक बड़ा अभ्यास का हिस्सा है। अपने स्तंभों को आकार देने के लिए एक पंक्ति को ब्लॉक-आकार से अधिक एक बाइट की आवश्यकता होगी, इसके लिए दो ब्लॉक आवंटित करने की आवश्यकता होगी और आपकी पंक्ति में दो ब्लॉक होंगे, रीडिंग करना, सम्मिलित करना और स्कैन करना अधिक समय लेने की तुलना में यदि आप प्रत्येक पंक्ति को एक ब्लॉक फिट कर सकते हैं (और प्रत्येक ब्लॉक में केवल एक पंक्ति है)। वह, कम से कम, इसका ऐतिहासिक कारण है। आजकल, अधिकांश लोग इस अभ्यास को उप-अनुकूलन मानते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.