2010-09-10 11 views
21

में वर्कर (500) बनाम वर्चर (अधिकतम) के बीच अंतर, मैं जानना चाहता हूं कि वर्चर (500) बनाम वर्चर (अधिकतम) का उपयोग करते समय प्रदर्शन, स्मृति और किसी अन्य चीज़ के संदर्भ में पेशेवर और विपक्ष क्या हैं?एसक्यूएल सर्वर

  • क्या दोनों समान संग्रहण स्थान का उपयोग करेंगे?

क्या एसक्यूएल सर्वर 2000/2005/2008 के मामले में उत्तर भिन्न है?

+2

[मेरे उत्तर को एक और अंतर के लिए यहां देखें] (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) और यह ब्लॉग पोस्ट [ Remus Rusanu द्वारा] (http: // rusanu।कॉम/2010/03/22/वर्च-तुलना-वर्चर्मैक्स-बनाम वर्चर्न /) –

+0

लिंक को देखें: http://stackoverflow.com/q/28980502/1805776 – vicky

उत्तर

29

SQL सर्वर 2000 और SQL सर्वर 7 में, एक पंक्ति आकार में 8000 बाइट से अधिक नहीं हो सकती है। इसका अर्थ यह है कि एक वर्बिनरी कॉलम केवल 8000 बाइट्स को स्टोर कर सकता है (माना जाता है कि यह तालिका में एकमात्र कॉलम है), एक वर्चर कॉलम 8000 वर्णों तक स्टोर कर सकता है और एक एनवीएआरएआरएआर कॉलम 4000 वर्ण (प्रति यूनिकोड प्रति 2 बाइट्स) तक स्टोर कर सकता है। डिस्क पर डेटा को सहेजने के लिए यह सीमा 8 KB आंतरिक पृष्ठ आकार SQL सर्वर का उपयोग करता है।

एक ही कॉलम में अधिक डेटा स्टोर करने के लिए, आपको टेक्स्ट, एनआईआर, या छवि डेटा प्रकार (बीएलओबी) का उपयोग करने की आवश्यकता है जो 8 केबी डेटा पृष्ठों के संग्रह में संग्रहीत हैं जो डेटा पेजों से अलग हैं जो स्टोर करते हैं एक ही टेबल में अन्य डेटा। इन डेटा पृष्ठों को बी-पेड़ संरचना में व्यवस्थित किया जाता है। बीएलओबी के साथ काम करना और कुशलतापूर्वक काम करना मुश्किल है। उन्हें किसी प्रक्रिया या फ़ंक्शन में चर के रूप में उपयोग नहीं किया जा सकता है और इन्हें स्ट्रिप फ़ंक्शन जैसे रीप्लेस, CHARINDEX या SUBSTRING के अंदर उपयोग नहीं किया जा सकता है। ज्यादातर मामलों में, आपको BLOBs में हेरफेर करने के लिए READTEXT, WRITETEXT, और UPDATETEXT आदेशों का उपयोग करना होगा।

इस समस्या को हल करने के लिए, माइक्रोसॉफ्ट ने SQL Server 2005 में VARCHAR (MAX), NVARCHAR (MAX), और VARBINARY (MAX) डेटा प्रकारों को प्रस्तुत किया। इन डेटा प्रकारों में समान मात्रा में डेटा हो सकता है BLOBs (2 जीबी) और वे अन्य डेटा प्रकारों के लिए उपयोग किए जाने वाले उसी प्रकार के डेटा पृष्ठों में संग्रहीत होते हैं। जब MAX डेटा प्रकार में डेटा 8 KB से अधिक हो जाता है, तो ओवर-फ्लो पेज का उपयोग किया जाता है। SQL सर्वर 2005 स्वचालित रूप से पृष्ठ पर एक ओवर-फ्लो संकेतक असाइन करता है और जानता है कि डेटा पंक्तियों को उसी तरीके से कैसे उपयोग किया जाए, वैसे ही यह अन्य डेटा प्रकारों में हेरफेर करता है। आप संग्रहित प्रक्रिया या फ़ंक्शन के अंदर MAX डेटा प्रकारों के चर घोषित कर सकते हैं और उन्हें चर के रूप में भी पास कर सकते हैं। आप स्ट्रिंग फ़ंक्शंस के अंदर भी उनका उपयोग कर सकते हैं।

माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005 में बीएलओबी के बजाय MAX डेटा प्रकारों का उपयोग करने की सलाह देता है। असल में, बीएलओबी को SQL सर्वर के भावी रिलीज में बहिष्कृत किया जा रहा है।

क्रेडिट: http://www.teratrax.com/articles/varchar_max.html


एसक्यूएल सर्वर में और SQL सर्वर , VARCHAR (मैक्स) के लिए अधिकतम भंडारण आकार 2^31-1 बाइट (2,147,483,647 बाइट्स या 2GB है - 1 बाइट्स)। स्टोरेज आकार + 2 बाइट दर्ज किए गए डेटा की वास्तविक लंबाई है। दर्ज किया गया डेटा लंबाई में 0 वर्ण हो सकता है। चूंकि VARCHAR डेटा प्रकार में प्रत्येक वर्ण एक बाइट का उपयोग करता है, इसलिए VARCHAR (MAX) डेटा प्रकार की अधिकतम लंबाई 2,147,483,645 है। आप के लिए

पूर्ण दिलचस्प पढ़ने: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

संदर्भ: http://msdn.microsoft.com/en-us/library/ms143432.aspx

+1

+1 बहुत विस्तृत प्रतिक्रिया। –

+0

केवल जो चीज मैं जोड़ूंगा वह 2000 की सीमाओं पर एक और टिप्पणी है - उपरोक्त में उल्लिखित - यदि आपके पास एकाधिक वर्चर्स कॉलम हैं, तो उनकी संयुक्त लंबाई 8000 –

+0

पॉल से सहमत नहीं हो सकती है, दूसरी बात यह है कि वर्चर (500)) यह लंबाई के साथ ऑटो बाधित है और वर्चर (अधिकतम) के मामले में यह नहीं है। तो ताह भी ठीक है। एक और बात, एसक्यूएल सर्वर के लिए वर्चर्स (500) या वर्चर (अधिकतम) का उपयोग किसी भी मामले में रिकॉर्ड्स डालने के दौरान मेमोरी आवंटित करने के लिए उपयोगी होगा, जबकि हमें इसमें स्टोर करने के लिए केवल 500 वर्णों की आवश्यकता होगी? –

2

एक VARCHAR(MAX) स्तंभ जबकि एक VARCHAR(500) स्तंभ 501 वर्ण या उससे अधिक की एक मूल्य स्वीकार करेंगे नहीं होगा। इसलिए यदि आपके पास एक व्यवसाय नियम है जो 500 वर्णों के मान को प्रतिबंधित करता है, तो VARCHAR(500) अधिक उपयुक्त होगा।

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