2010-06-29 6 views
10

मेरे पास विरासत T-SQL कोड का बहुत अधिक (हजारों स्थानों पर) कोड है जो केवल INSERT को उपयोगिता तालिका में varchar(8000) कॉलम में बनाता है। हमारी ज़रूरतें बदल गई हैं और अब उस कॉलम को बड़े मूल्यों को संभालने में सक्षम होना चाहिए। नतीजतन मुझे उस कॉलम को varchar(max) बनाना होगा। यह केवल एक सादा डेटा कॉलम है जहां इसकी कोई पूर्व खोज नहीं है, उस पर कोई अनुक्रमणिका नहीं है, केवल एक प्रक्रिया इसे पढ़ती है, यह INSERT है और एप्लिकेशन (लगभग लॉग प्रविष्टि की तरह) भूल जाती है।वर्चर (8000) से वर्चर (अधिकतम) तक कॉलम बदलने वाले किसी छिपे हुए नुकसान?

मैं केवल कुछ स्थानों में परिवर्तन करने की योजना बना रहा हूं जो वास्तव में बड़े डेटा उत्पन्न करेंगे, और एक ही संग्रहित प्रक्रिया में जो इस कॉलम को संसाधित करता है।

  • क्या varchar(8000) से varchar(max) पर कोई कॉलम बदलने वाले कोई छिपे हुए नुकसान हैं?
  • सभी T-SQL स्ट्रिंग कार्यों काम करेगा ही, LEN(), RTRIM(), SUBSTRING(), आदि
  • किसी को भी किसी भी कारण है कि मैं कोड है कि सोचता है कि स्तंभ अभी भी varchar(8000) है कोई भी परिवर्तन करने के लिए होगा कल्पना कर सकते हैं?
+0

आप एक पाठ स्तंभ के लिए स्विच क्यों नहीं है? – Maz

+2

@ मैक्स ऐसी चीजें हैं जो आप टेक्स्ट कॉलम पर नहीं कर सकते हैं, जो कि आप VARCHAR (MAX) (जैसे DISTINCT क्वेरी) पर कर सकते हैं –

+0

aggregrate फ़ंक्शन और टेक्स्ट कॉलम बहुत अच्छी तरह से नहीं जाते हैं ... – riffnl

उत्तर

6
  • सभी MAX प्रकारों में एक छोटा प्रदर्शन जुर्माना है, Performance comparison of varchar(max) vs. varchar(N) देखें।
  • यदि आपके रखरखाव में ऑनलाइन संचालन (ऑनलाइन इंडेक्स पुनर्निर्माण) शामिल है, तो आप उन्हें करने की संभावना खो देंगे। Online operations are not supported for tables with BLOB columns:
    • क्लस्टर अनुक्रमित, बनाया जाना चाहिए फिर से बनाया, या ऑफ़लाइन गिरा जब अंतर्निहित तालिका बड़ी वस्तु (LOB) डेटा प्रकार शामिल हैं: छवि, ntext, पाठ, varchar (max), nvarchar (अधिकतम) , varbinary (अधिकतम), और एक्सएमएल।
    • तालिका में LOB डेटा प्रकार होने पर Nonunique nonclustered अनुक्रमणिका ऑनलाइन बनाई जा सकती हैं लेकिन इनमें से कोई भी कॉलम इंडेक्स परिभाषा में या तो कुंजी या नॉनकी (शामिल) कॉलम के रूप में उपयोग नहीं किया जाता है। LOB डेटा प्रकार कॉलम के साथ परिभाषित गैर-क्लस्टर इंडेक्स को ऑफ़लाइन बनाया या पुनर्निर्मित किया जाना चाहिए।

प्रदर्शन दंड वास्तव में छोटा है, तो मैं इसके बारे में चिंता नहीं होगी। ऑनलाइन पुनर्निर्माण करने की क्षमता का नुकसान वास्तव में गर्म होना चाहिए-ऑनलाइन ऑपरेशन टेबल के लिए समस्याग्रस्त हो सकता है। जब तक ऑनलाइन संचालन जरूरी नहीं है, मैं इसके लिए जाने और इसे MAX में बदलने के लिए वोट दूंगा।

2

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

किसी भी अपडेट का परीक्षण करना सुनिश्चित करें जहां टेक्स्ट मौजूदा टेक्स्ट में जोड़ा गया है। इसे नियमित संयम का उपयोग करके काम करना चाहिए, लेकिन मैं इसे साबित करने में सक्षम होना चाहता हूं।

3

क्रिस्टल रिपोर्ट 12 (और जहां तक ​​मुझे पता है) अन्य संस्करण ठीक से वर्चर (अधिकतम) को संभाल नहीं पाते हैं और इसे वर्चर (255) के रूप में व्याख्या करते हैं जो रिपोर्ट में डेटा को छोटा कर देता है।

तो यदि आप क्रिस्टल रिपोर्ट्स का उपयोग कर रहे हैं, तो यह वर्चर (अधिकतम) का नुकसान है। या क्रिस्टल का उपयोग करने के लिए एक नुकसान, सटीक होना चाहिए।

देखें:
http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=5843&PID=17503
http://michaeltbeeitprof.blogspot.com/2010/05/crystal-xi-and-varcharmax-aka-memo.html

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