2009-02-27 18 views
39

क्या varchar फ़ील्ड का आकार दो बनाम एक और संख्या की शक्ति के रूप में आकार देने के लिए अधिक कुशल है? मैं नहीं सोच रहा हूं, क्योंकि SQL सर्वर के लिए डिफ़ॉल्ट 50 है।वर्कर फील्ड - क्या दो और कुशल की शक्ति है?

हालांकि, मैंने सुना है (लेकिन कभी पुष्टि नहीं की है कि 2 की शक्ति के रूप में आकार देने वाले फ़ील्ड अधिक कुशल हैं क्योंकि वे बाइट्स और कंप्यूटर तक समान हैं बिट्स & बाइट्स में प्रक्रिया।

तो, क्या varchar(32) या varchar(64) के रूप में घोषित एक फ़ील्ड varchar(50) पर कोई वास्तविक लाभ है?

उत्तर

38

सं

कुछ अन्य प्रयोग में, वहाँ, कुछ फायदे दो आकार के एक शक्ति के साथ संरचनाओं का उपयोग कर रहे हैं ज्यादातर क्योंकि आप इन की संख्या एक और सत्ता के अंदर एक अच्छा (दो की शक्ति) फिट कर सकते हैं दो आकार की संरचना। लेकिन यह डीबी फ़ील्डनाइजेशन पर लागू नहीं होता है।

वर्चर्स से संबंधित एकमात्र शक्ति-आकार का वर्चर (या कुछ एसक्यूएल बोलियों में टेक्स्ट/बीएलओबी) के बारे में है: यदि यह 256 से कम है, तो यह लंबाई को इंगित करने के लिए एक बाइट का उपयोग कर सकता है। यदि यह 65536 (64 केबी) से कम है, तो दो बाइट पर्याप्त हैं, तीन बाइट 16777216 (16 एमबी) तक काम करते हैं, चार बाइट 42 9 4 9 672 9 6 (4 जीबी) तक जाते हैं।

इसके अलावा, यह तर्क दिया जा सकता है कि VARCHAR(50)VARCHAR(255) जितना महंगा है, क्योंकि दोनों को स्टोरेज के एन + 1 बाइट की आवश्यकता होगी।

पाठ्यक्रम यूनिकोड के बारे में सोच से पहले का कोई का

... यह घटित करने के लिए पंक्तियों के लिए इन-स्मृति स्वरूप में होगा

21

मैंने हमेशा सोचा कि लोग वर्चर्स फ़ील्ड के लिए दो की शक्तियां चुनते हैं क्योंकि हम geeks हैं और यही वह है जो हम करते हैं। कम से कम यही मैंने हमेशा किया है।

0

यह विशिष्ट डेटाबेस कार्यान्वयन पर निर्भर करता है, लेकिन मैं इसकी अपेक्षा नहीं करता। यह आमतौर पर पात्रों की संख्या पर कोई गणना नहीं कर रहा है, इसलिए इसे केवल प्रदर्शन को प्रभावित नहीं करना चाहिए।

3

कुछ अधिकतम लंबाई का उपयोग करने से आप एकमात्र मूर्त लाभ देखेंगे VARCHAR के लिए आवश्यक संग्रहण स्थान है। 255 से अधिक की लंबाई के लिए प्रत्येक पंक्ति में मान की लंबाई को स्टोर करने के लिए अतिरिक्त बाइट की आवश्यकता होगी (और 256^2 या उससे अधिक की लंबाई के लिए अतिरिक्त 2 बाइट)।

4

सामान्य रूप से एसक्यूएल के लिए? नहीं, एक विशिष्ट कार्यान्वयन के लिए, शायद।

अधिक कुशलता क्या है एक विनिर्देश (एसक्यूएल केवल एक विनिर्देशन) द्वारा निर्धारित नहीं है, लेकिन यह एक निश्चित डीबीएमएस में कैसे लागू किया जाता है।

+0

एक संभावित जगह ... 2^n लंबाई संरेखण ऑफसेट की आवश्यकता को कम करना चाहिए। आमतौर पर एक छोटा सा प्रभाव, मुझे संदेह है। – dmckee

+1

मेमोरी संरेखण गुणकों में नहीं, गुणों में नहीं होता है। 32-बिट गठबंधन आर्किटेक्चर पर, उदाहरण के लिए, सर्वोत्तम बाइट ऑफसेट 4 × एन हैं। – Juliano

संबंधित मुद्दे