2012-03-02 17 views
9

आप कैसे निर्णय लिया nvarchar या nchar उपयोग करने के लिए है कि क्या करते हैं?बनाम nvarchar प्रदर्शन nchar

उदाहरण के लिए मैं देखा है कि डिफ़ॉल्ट सदस्यता sqlmembership प्रदाता द्वारा बनाई गई डेटाबेस वाणी ईमेल स्तंभ प्रकार nvarchar (256)

मेरे लिए

कि एक ईमेल स्तंभ के लिए एक अनावश्यक रूप से बड़े अधिकतम मूल्य की तरह लगता है हो सकता है। मुझे सामान्य परिस्थितियों में संदेह होगा कि 40 या 50 वर्णों से अधिक लंबे ईमेल ईमेल दुर्लभ होंगे।

लेकिन के रूप में ऐसी ई-मेल पते के रूप में डेटा लंबाई में भिन्नता है वे हमेशा इतनी के रूप में अनावश्यक अंतरिक्ष समाप्त करने के लिए एक nvarchar के रूप में जमा किया जाना चाहिए?

यदि ईमेल कॉलम के लिए nvarchar का उपयोग करना है। एक ईमेल पता बदलने की स्थिति में, यदि नया ईमेल पिछले ईमेल की तुलना में लंबा है तो क्या इसका कारण कई पेज विभाजित होगा और इसके लिए प्रदर्शन लागत बहुत अधिक होगी?

क्या तुमने कभी एक ई-मेल पते के लिए nchar (40) का उपयोग करते हुए और कोई पेज विभाजन प्रदर्शन लागत के बदले में भंडारण स्थान के नुकसान के साथ समझौता करने पर विचार करेंगे?

या nchar (40) का उपयोग डेटाबेस आकार में काफी वृद्धि करेगा जिससे क्वेरी गति पर अन्य प्रदर्शन हिट हो जाए?

'केवल का उपयोग nchar जब आप डेटा के आकार का पता कॉलम भरने के लिए' होगा एक उचित नियम का पालन करने के लिए हो सकता है?

+0

आम तौर पर, 5-10 वर्णों से कम कुछ भी (जैसे मुद्रा प्रतीकों 'यूएसडी', 'जीबीपी' इत्यादि या उदाहरण के लिए अमेरिका राज्य 'एजेड', 'एमई' इत्यादि) निश्चित चौड़ाई' चार्ज का उपयोग करने के लिए समझ में आता है (एक्स) 'या' एनसीएचएआर (एक्स) 'प्रकार। इसके अलावा, मैं हमेशा परिवर्तनीय लंबाई तारों को चुनता हूं - 'वचरर' के लिए 2 बाइट ओवरहेड इसके लायक हैं, यदि आपके पास 'वर्चर (255)' है और आपकी अधिकांश प्रविष्टियां केवल 40-50 वर्ण लंबी हैं .. –

उत्तर

10

ईमेल 40 से अधिक समय या 50 अक्षर बहुत दुर्लभ

यह केवल अपने मॉडल बर्बाद करने के लिए ले जाता है हो सकता है ...

नया ईमेल पिछले ईमेल से अधिक लंबी है, तो इससे कई पेज

नहीं। लेकिन अगर ऐसा भी हुआ, तो यह नहीं है कि आप डेटा मॉडल कैसे डिज़ाइन करते हैं। आइए तर्क के लिए, हर बार एक ईमेल अपडेट होने पर यह एक पृष्ठ विभाजित होगा। क्या आप के लिए अनुकूलित कर सकते हैं कि? नहीं, क्योंकि एक बड़े निश्चित आकार को आवंटित करना (यानी एनएचएआरएआर (256) का उपयोग करना) बहुत खराब है, यह वास्तव में अद्यतन पर विभाजित संभावित पृष्ठ को खत्म कर देता है (फिर, यदि ऐसा पृष्ठ विभाजित होता है) लेकिन टेबल आकार को बढ़ाने की बहुत खराब लागत, जो आईओ बैंडविड्थ और मेमो खपत का अनुवाद करती है, Disk space is cheap...THAT'S NOT THE POINT!!! देखें।

मैं क्यों कहता हूं कि परिवर्तनीय लंबाई अद्यतन कोई कारण पृष्ठ विभाजन नहीं करता है? क्योंकि पृष्ठ विभाजन तब मजबूर हो जाते हैं जब पंक्ति छवि पृष्ठ में फिट नहीं होती है। एक परिवर्तनीय लंबाई कॉलम के लिए एक अद्यतन पंक्ति-ओवरफ्लो का कारण बनता है और पंक्ति को उसी आकार में पहले या यहां तक ​​कि छोटे से छोड़ देता है। ऐसे मामलों जब पंक्ति अतिप्रवाह के बाद आकार में वृद्धि होगी, लेकिन इस के लिए वहाँ कई हालत वास्तव में एक पेज विभाजन को गति प्रदान करने: जब अद्यतन करने

  • मूल्य अद्यतन एक पंक्ति आकार में वृद्धि को गति प्रदान करने के लिए किया, यह केवल हो सकता है Table and Index Organization में वर्णित 24-बाइट पॉइंटर से कम के मूल्य से इस सूचक आकार से बड़े मान के लिए।
  • पंक्ति आकार (जो परिभाषा के द्वारा प्रत्येक चर स्तंभ में गैर-शून्य को शून्य से अपडेट के साथ-अपडेट किया जा रहा, के लिए अधिक से अधिक 24 बाइट्स बढ़ौतरी है) में वृद्धि के लिए एक पंक्ति है कि पेज में फिट नहीं करता है में परिणाम के लिए है।
  • कोई संभव अंतरिक्ष (यानी। सभी चर लंबाई क्षेत्रों को पहले से ही बंद पंक्ति धकेल दिया जाता है) बंद पंक्ति अन्य क्षेत्रों को आगे बढ़ाने से पंक्ति में पुनः प्राप्त

मैं वास्तव में नहीं खरीदते हैं कि आपके पास होना चाहिए आपके डिज़ाइन को चलाने में प्रमुख कारक के रूप में उपरोक्त स्थितियों के रूप में इस तरह का एक अजीब और गूढ़ वर्कलोड। किसी भी मूल्य के लिए समायोजित करने के लिए सुविधाजनक लंबाई के एनवीएचकएआर का उपयोग करें।

+0

जानकारी और लिंक के लिए धन्यवाद! मैंने पहले किम्बर्ली एल। ट्रिप को पढ़ा है लेकिन इसे फिर से पढ़ना अच्छा है। और यह मेरे लिए उपयोगी है कि एसक्यूएल सर्वर पंक्ति ओवरफ्लो जैसी स्थितियों को कैसे संभालता है। तो धन्यवाद। –

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