2010-10-19 15 views
7

संभावित डुप्लिकेट:
varchar Fields - Is a Power of Two More Efficient?
Nvarchar or varchar what is better use multiply of 2 or rounded full numbers??SQL सर्वर में कॉलम के लिए बेस 2 लंबाई का उपयोग करने का कोई कारण है?

सरासर आदत से मैं कॉलम है कि मैं एसक्यूएल सर्वर में उपयोग Base2 आकार होने के लिए के आकार को परिभाषित।

  1. आईडी पूर्णांक
  2. प्रथम nvarchar (64)
  3. अंतिम नाम nvarchar (64)
  4. Col4 varchar (16)
  5. Col5 nvarchar: उदाहरण के लिए, यहाँ एक मेज है कि मैं पर काम कर रहा हूँ (32)
  6. Col6 nvarchar (128)
  7. आदि ...

मुझे नहीं पता कि यह आदत कहाँ से आई थी, और मुझे यकीन नहीं है कि यह भी समझ में आता है। क्या निम्न तालिका परिभाषा उपरोक्त की तुलना में किसी भी तरीके से कम कुशल होगी?

  1. आईडी पूर्णांक
  2. प्रथम nvarchar (50)
  3. अंतिम नाम nvarchar (50)
  4. Col4 varchar (10)
  5. Col5 nvarchar (30)
  6. Col6 nvarchar (100)
  7. आदि ...

मुझे लगता है कि मेरा मुख्य खोज n है: क्या बेस 2 कॉलम लंबाई का उपयोग करने के लिए कोई वैध कारण हैं?

+0

[वर्चर फ़ील्ड्स का संभावित डुप्लिकेट - दो और कुशल की शक्ति है?] (Http://stackoverflow.com/questions/593364/varchar-fields-is-a-power-of-two-more- कुशल) या यह http://stackoverflow.com/questions/1374958 – gbn

+0

अच्छा पाता है @ जीबीएन, मुझे लगता है कि यह एक डुप्ली – travis

+0

है मुझे विश्वास नहीं है कि इस प्रश्न में एकाधिक डुप्लिकेट हैं –

उत्तर

4

कॉलम को उनके डेटाबेस डिज़ाइन के लिए सक्रिय रूप से हानिकारक होने की आवश्यकता से बड़ा बनाना। बीओएल से:

एक तालिका में प्रति पंक्ति अधिकतम 8,060 बाइट्स हो सकती हैं। SQL सर्वर 2008 में, यह प्रतिबंध उन सारणीओं के लिए आराम से है जिनमें वर्चर, nvarchar, varbinary, sql_variant, या CLR उपयोगकर्ता-परिभाषित प्रकार कॉलम शामिल हैं .... 8,060-बाइट पंक्ति-आकार सीमा को पार करने से प्रदर्शन प्रभावित हो सकता है क्योंकि SQL सर्वर अभी भी एक बनाए रखता है प्रति पेज 8 केबी की सीमा। जब वर्चर, nvarchar, varbinary, sql_variant, या सीएलआर उपयोगकर्ता परिभाषित प्रकार कॉलम का संयोजन इस सीमा से अधिक है, तो SQL सर्वर डेटाबेस इंजन ROW_OVERFLOW_DATA आवंटन इकाई में सबसे बड़ी चौड़ाई के साथ रिकॉर्ड कॉलम को दूसरे पृष्ठ पर ले जाता है, जबकि 24- मूल पृष्ठ पर बाइट पॉइंटर। बड़े रिकॉर्ड को दूसरे पृष्ठ पर ले जाना गतिशील रूप से होता है क्योंकि अद्यतन संचालन के आधार पर रिकॉर्ड लंबा हो जाते हैं। रिकॉर्ड्स को कम करने वाले ऑपरेशंस अपडेट करें, इन्हें IN_ROW_DATA आवंटन इकाई में मूल पृष्ठ पर वापस ले जाया जा सकता है। साथ ही, अन्य चुनिंदा संचालनों को पूछताछ और निष्पादित करना, जैसे कि बड़े-बड़े रिकॉर्ड पर प्रकार या जुड़ने वाले पंक्तियों में पंक्ति-ओवरफ्लो डेटा धीमा हो जाता है, क्योंकि इन रिकॉर्ड्स को असीमित रूप से सिंक्रनाइज़ तरीके से संसाधित किया जाता है।

मुझे पता चला है कि क्या आप उन्हें अतिरिक्त आकार देते हैं या बाद में वे इसका उपयोग करेंगे। इसके अलावा, अगर आप वर्चर (64) के रूप में कुछ सेट करते हैं और आपको केवल 10 वर्णों की अधिकतम आवश्यकता होती है, तो आप इसे अधिक संभावना बना रहे हैं कि कोई व्यक्ति इसके इच्छित उद्देश्य के अलावा क्षेत्र का उपयोग करेगा और आपको पता चलेगा कि आपको उन क्षेत्रों में खराब डेटा मिलता है (एक ऐसे नंबर नंबर फ़ील्ड की तरह जिसमें ऑफिस सचिव के बारे में नोट्स शामिल हैं ताकि एक यादृच्छिक उदाहरण न लेने के लिए संपर्क किया जा सके)।

हालांकि कम से कम यह डिज़ाइन सब कुछ nvarchar (अधिकतम) बनाने से कहीं बेहतर है।

+0

वर्चर (10) के बजाय वर्कर (64) एक बुरा उदाहरण है क्योंकि वर्कर (16) उस मामले में उपयोग किया जाता था, जो केवल 4 बाइट स्पेस को बर्बाद कर देता था। वर्कर (300) के बजाय वर्चर (512) बर्बाद जगह का एक बेहतर उदाहरण होगा जिसका बहुत अधिक डेटा संग्रहित करने के लिए दुर्व्यवहार किया जा सकता है जिसका मतलब उस कॉलम में नहीं होना चाहिए – Dan

+0

यूएस फोन नंबर अक्सर वर्चर में संग्रहीत होते हैं (10) - क्षेत्र कोड के लिए 3 अंक, उपसर्ग के लिए 3 अंक और प्रत्यय के लिए 4 अंक। यदि आपको अंतरराष्ट्रीय फोन नंबरों को स्टोर करने की आवश्यकता है और आप संख्या के गैर-संख्यात्मक हिस्सों को स्टोर करते हैं जो अलग-अलग हो सकते हैं। – HLGEM

1

नहीं, यह केवल 2 की शक्तियों में सोचने और कार्य करने के लिए एक प्रोग्रामर की आदत है - एसक्यूएल सर्वर से ऐसा करने के लिए निश्चित रूप से कोई तकनीकी कारण नहीं है - गति या प्रदर्शन में कोई वृद्धि या ऐसा कुछ भी नहीं।

0

संदिग्ध। सबसे पहले, कॉलम की सटीक लंबाई ज्यादातर आपके स्वयं के डेटा स्कीमा कारणों से संबंधित होती है। दूसरा, यदि लंबाई क्षमता में प्रवेश करती है, तो सभी कॉलमों की कुल लंबाई सबसे महत्वपूर्ण मानदंड है, और फिर भी, बहीखाता ओवरहेड होगा जिसका अर्थ यह होगा कि एक अच्छा दौर संख्या सबसे अच्छा जवाब होने की संभावना नहीं है।

तो आपको अपनी पंक्ति आकार को किसी विशेष राशि तक सीमित करने के बारे में सलाह मिल सकती है, ताकि पूरी पंक्ति किसी पृष्ठ में या उन पंक्तियों के साथ कुछ फिट हो। यह प्रति रिकॉर्ड डिस्क I/O की संख्या को कम करने के लिए है। लेकिन व्यक्तिगत स्तंभ आकार कोई फर्क नहीं पड़ता, यह कुल योग होगा।

0

यह विशेष रूप से एक SQL सेवर प्रश्न नहीं है ... मैं ओरेकल और MySQL में वही काम करता हूं। इस तथ्य के अलावा कोई विशेष कारण नहीं है कि शायद मैं बेस 2 आकारों का उपयोग करके अधिक आरामदायक महसूस करता हूं।

3

ऐसा करने का कोई कारण नहीं, खासकर (एन) वर्कर डेटा के साथ, जहां स्टोरेज आकार डेटा + 2 बाइट्स की वास्तविक लंबाई है।

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

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