क्या अस्थायी तालिकाओं में varchar आकार मायने रखता है?


16

संग्रहीत प्रक्रियाओं में अस्थायी तालिकाओं में varchar(255)सभी varcharक्षेत्रों का उपयोग करने के बारे में मेरी पत्नी के काम पर एक बहस है । मूल रूप से, एक शिविर 255 का उपयोग करना चाहता है क्योंकि यह हमेशा परिभाषा में परिवर्तन होने पर भी काम करेगा, और दूसरा शिविर संभावित प्रदर्शन सुधार के लिए स्रोत तालिकाओं में आकार के साथ रहना चाहता है।

क्या प्रदर्शन शिविर सही है? क्या अन्य निहितार्थ हैं? वे SQL सर्वर का उपयोग कर रहे हैं।


मेरा तर्क है कि शायद आपको पहली बार में अस्थायी तालिकाओं की आवश्यकता नहीं है। उनका उपयोग किस लिए किया जा रहा है? यदि उनकी आवश्यकता है, तो इन विशिष्ट स्तंभों का उपयोग किस लिए किया जा रहा है? क्या वे किसी भी प्रकार के जोड़ या तुलना में उपयोग किए जाते हैं? क्या कोई अंतर्निहित स्तंभ nvarchar है और varchar नहीं है?
हारून बर्ट्रेंड

@AaronBertrand मॉड्यूलर ताल के लिए अस्थायी टेबल हैं। डेटा रूपांतरित हो जाता है और व्यापार नियमों के आधार पर कई बार आबाद होता है जो बदल सकता है। मुझे लगता MAX()है कि मिक्स में भी कुछ हैं ।
ब्रायन निकल

जवाबों:


6

आप अपने टेम्‍प टेबलों का उपयोग कैसे कर रहे हैं, इसके आधार पर, आप डेटा ट्रंकेशन समस्या में चल सकते हैं।

यह उदाहरण थोड़ा विवादित है, लेकिन यह मेरी बात को दर्शाता है। उदाहरण:

  1. आपका उपयोगकर्ता तालिका स्तंभ varchar (50) है।
  2. आपका अस्थायी तालिका स्तंभ varchar (255) है।
  3. आपके उपयोगकर्ता तालिका में उस स्तंभ में 45 वर्णों के साथ आपका रिकॉर्ड है।
  4. अपनी प्रक्रिया में, आप उस कॉलम के अंत में जीत के लिए 'जीत -' के लिए, उस अस्थायी तालिका को अपनी उपयोगकर्ता तालिका में विलय करने से पहले।

अस्थायी तालिका 59 की लंबाई के साथ नए वर्चर मान को सहर्ष स्वीकार करेगी। हालांकि, आपकी उपयोगकर्ता तालिका नहीं हो सकी। आप इसे अपनी प्रक्रिया में कैसे संभालते हैं, इसके आधार पर, यह ट्रंकेशन या एक त्रुटि हो सकती है।

जब तक आप इन मुद्दों के लिए दस्तावेज और खाता नहीं बनाते हैं, तब तक आपकी प्रक्रिया अप्रत्याशित तरीके से प्रदर्शन कर सकती है।

व्यक्तिगत रूप से, मुझे नहीं लगता कि इस सवाल का कोई उत्तर है जो 100% सही है। यह वास्तव में इस बात पर निर्भर करता है कि आप उन टेम्प टेबल का उपयोग कैसे कर रहे हैं।

उम्मीद है की यह मदद करेगा


0

संग्रहीत कार्यविधियों में अस्थायी तालिकाओं में varchar(255)सभी varcharक्षेत्रों के लिए उपयोग करना ।

मैं वास्तविक क्षेत्र की लंबाई के उपयोग की ओर झुकूंगा।

मैंने हाल ही में पढ़ा कि MySQL (मैं SQL सर्वर समान हूँ) अस्थायी तालिकाएँ प्रत्येक varcharस्तंभ के लिए अधिकतम लंबाई संभव स्टोर करने के लिए पर्याप्त मेमोरी आवंटित करती हैं ... varcharसभी क्षेत्रों के लिए आवश्यक मेमोरी का 200% -500% आवंटित करने के लिए एक व्यवस्थित दृष्टिकोण संग्रहीत प्रक्रियाएं सिस्टम संसाधनों पर एक अनावश्यक ड्रा की तरह लगती हैं। यदि आप कभी भी इन टेंपरेचर टेबल बनाने के लिए महत्वपूर्ण मात्रा में मेमोरी का उपयोग कर रहे हैं, तो आप अनावश्यक रूप से मेमोरी का दावा कर सकते हैं जो कि कैशिंग के लिए उपयोग में थी, भविष्य में कुछ बिंदुओं पर सर्वर के लिए अधिक काम पैदा करना, भले ही स्टोर प्रक्रियाएं पूरी हो जाने के बाद।

संपादित करें: बिल करविन का उत्तर देखें: /programming/1962310/importance-of-varchar-length-in-mysql-table


2
मान लें SQL सर्वर समान है? मैं नहीं ...
एके

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