SQL सर्वर VARCHAR स्तंभ चौड़ाई


14

वेब के चारों ओर खोज करने पर, मुझे इस बात पर परस्पर विरोधी सलाह मिली है कि क्या वर्ली कॉलम (255) जैसे वर्चुअर (30) संभवतया व्यापक रूप से विस्तृत स्तंभों को निर्दिष्ट करते समय प्रदर्शन प्रभाव पड़ता है।

मैं लगातार देखता हूं कि अगर पूरी पंक्ति 8060 बाइट्स से अधिक है तो एक प्रदर्शन हिट है। इसके अलावा, मैं असहमति देखता हूं।

क्या यह दावा सही है The default is SET ANSI PADDING ON = potential for lots of trailing spaces? जब तक कुल पंक्ति की चौड़ाई 8060 से कम नहीं होती, तब तक ओवर-साइज़िंग वर्चहर कॉलम में कोई वास्तविक प्रदर्शन चिंताएं हैं?

स्तंभ चौड़ाई मायने रखती है कि साक्ष्य


The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need.

http://www.sql-server-performance.com/2007/datatypes/


  • Length is a constraint on the data (like CHECK, FK, NULL etc)
  • Performance when the row exceeds 8060 bytes
  • Can not have unique constraint or index (key column width must be < 900)
  • The default is SET ANSI PADDING ON = potential for lots of trailing spaces

Varchar (8000) को सेट करने के परिणाम क्या हैं?


स्तंभ की चौड़ाई के साक्ष्य कोई मायने नहीं रखते


If you're talking about varchar and nvarchar then no, there is no penalty for allowing a higher field length.

/programming/7025996/overstating-field-size-in-database-design


The varchar datatype, by contrast, consumes only the amount of actual space used plus 2 bytes for overhead

http://sqlfool.com/content/PerformanceConsiderationsOfDataTypes.pdf


जवाबों:


7

इस प्रश्न को बेहतर रूप में कहा जा सकता है:

"एक चर-लंबाई वाले कॉलम की अधिकतम लंबाई को ओवर-निर्दिष्ट करने का क्या फायदा है?"

सामान्य तौर पर, बहुत कम लाभ होता है, और विभिन्न लिंक किए गए उत्तर के रूप में कई नुकसान सामने आते हैं। किसी भी अन्य चिंताओं के अलावा, यह विचार करें कि SQL सर्वर खुला-स्रोत नहीं है: सिस्टम में दी गई जानकारी के आधार पर कई 'मैजिक नंबर' और हेयुरिस्टिक्स लागू होते हैं। स्रोत कोड पहुंच के बिना, हम कभी भी पूरी तरह से निश्चित नहीं हो सकते हैं कि इस अभ्यास का क्या प्रभाव हो सकता है।

में कुछ मामलों में, जहां एक स्तंभ की औसत लंबाई में काफी अधिक से अधिक 50% जब प्रकार / हैश स्मृति अनुदान की गणना एसक्यूएल सर्वर द्वारा ग्रहण किया है, तो आप के ऊपर-निर्दिष्ट करने अधिकतम लंबाई के द्वारा एक प्रदर्शन में सुधार देख सकते हैं। यह एक संदिग्ध वर्कअराउंड है , और शायद आधार स्तंभ की परिभाषा को बदलने के बजाय केवल एक स्पष्ट CASTया CONVERTटिप्पणियों के साथ लागू किया जाना चाहिए । कभी-कभी, पूरी पंक्तियों के बजाय कुंजियों को क्रमबद्ध करने के लिए क्वेरी को फिर से लिखना बेहतर होगा ।

जहाँ अधिकतम पंक्ति का आकार पंक्ति की सीमा से अधिक हो सकता है (भले ही कोई पंक्तियाँ वास्तव में न हों), पंक्तियों को हटाने से एक ट्रिगर मौजूद होने पर अप्रत्याशित पृष्ठ-विभाजन हो सकता है। अद्यतन भी एक ही तंत्र के माध्यम से विखंडन हो सकता है।

SQL सर्वर ज्यादातर मामलों में एक बहुत अच्छा काम करता है जहां इसे मेटाडेटा से अच्छी, सटीक जानकारी प्रदान की जाती है। 'सुविधा' के लिए इस सिद्धांत से समझौता करना मुझे नासमझ लगता है। एक समझदार दृष्टिकोण एक अधिकतम लंबाई मूल्य चुनना है जो संग्रहीत किए जाने वाले वास्तविक डेटा, और किसी भी परिवर्तनशील परिवर्तन के अनुसार उचित है


-3

जैसा कि आपने संकेत दिया है, जब तक कि पंक्ति का आकार 8060 (या जो भी अधिकतम पर सेट होता है) से अधिक नहीं होता है, VARCHAR (30) या VARCHAR (255) या बड़े का उपयोग करने में कोई प्रदर्शन अंतर नहीं है। लिंक्ड आर्टिकल से CHAR to VARCHAR की तुलना वास्तव में उचित नहीं है। हालाँकि मैं मानता हूँ कि आपको अपनी आवश्यकता से अधिक स्थान निर्दिष्ट नहीं करना चाहिए, लेकिन कई मामलों में आप यह नहीं जानते कि आपको वास्तव में कितनी जगह की आवश्यकता होगी। तो VARCHAR अंतरिक्ष के साथ उदार बनें - मुझे पूरा यकीन है कि खेतों के आकार को बढ़ाने के लिए एक टेबल पुनर्निर्माण की आवश्यकता होती है, जबकि घटाना एक साधारण सारणी बयान है।


6
परिवर्तनशील लंबाई के स्तंभों का आकार बढ़ाना एक साधारण मेटाडेटा परिवर्तन ( maxसे बढ़ने के अलावा non max) है। यह विपरीत दिशा है जिसमें ऊंचा ओवरहेड है।
मार्टिन स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.