Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या सभी टेक्स्ट-आधारित फ़ील्ड के लिए जेनेरिक वर्चर (255) का उपयोग करने के नुकसान हैं?

भंडारण में, VARCHAR(255) CHAR(255) . के विपरीत, किसी दी गई पंक्ति पर केवल आपकी ज़रूरत की लंबाई को संग्रहीत करने के लिए पर्याप्त स्मार्ट है जो हमेशा 255 वर्णों को संग्रहीत करेगा।

लेकिन चूंकि आपने इस प्रश्न को MySQL के साथ टैग किया है, मैं एक MySQL-विशिष्ट टिप का उल्लेख करूंगा:चूंकि पंक्तियों को स्टोरेज इंजन लेयर से SQL लेयर में कॉपी किया जाता है, VARCHAR फ़ील्ड को CHAR . में बदल दिया जाता है निश्चित-चौड़ाई वाली पंक्तियों के साथ काम करने का लाभ प्राप्त करने के लिए। तो स्मृति में तार अधिकतम लंबाई तक गद्देदार हो जाते हैं आपके घोषित VARCHAR . में से स्तंभ।

जब आपकी क्वेरी परोक्ष रूप से एक अस्थायी तालिका उत्पन्न करती है, उदाहरण के लिए सॉर्ट करते समय या GROUP BY , यह बहुत मेमोरी का उपयोग कर सकता है। यदि आप बहुत सारे VARCHAR(255) . का उपयोग करते हैं डेटा के लिए फ़ील्ड जिन्हें इतना लंबा होने की आवश्यकता नहीं है, यह अस्थायी तालिका को बहुत बड़ा बना सकता है।

आप यह जानना भी पसंद कर सकते हैं कि इस "पैडिंग आउट" व्यवहार का अर्थ है कि utf8 वर्ण सेट पैड के साथ घोषित एक स्ट्रिंग प्रति वर्ण तीन बाइट्स तक है, यहां तक ​​​​कि आपके द्वारा एकल-बाइट सामग्री (जैसे ascii या latin1 वर्ण) के साथ संग्रहीत स्ट्रिंग्स के लिए भी। और इसी तरह utf8mb4 कैरेक्टर सेट स्ट्रिंग को मेमोरी में प्रति कैरेक्टर चार बाइट्स तक पैड करने का कारण बनता है।

तो एक VARCHAR(255) utf8 में "नो ओपिनियन" जैसी एक छोटी स्ट्रिंग को डिस्क पर 11 बाइट्स (दस लोअर-चारसेट कैरेक्टर, प्लस लंबाई के लिए एक बाइट) लेता है, लेकिन यह मेमोरी में 765 बाइट्स लेता है, और इस तरह टेम्पल टेबल या सॉर्ट किए गए परिणामों में।

मैंने MySQL उपयोगकर्ताओं की मदद की है, जिन्होंने अनजाने में अक्सर 1.5GB अस्थायी तालिकाएँ बनाईं और अपनी डिस्क स्थान भर दीं। उनके पास बहुत सारे VARCHAR(255) थे स्तंभ जो व्यवहार में बहुत छोटे तारों को संग्रहीत करते हैं।

आप जिस प्रकार के डेटा को स्टोर करना चाहते हैं, उसके आधार पर कॉलम को परिभाषित करना सबसे अच्छा है। आवेदन से संबंधित बाधाओं को लागू करने के लिए इसका लाभ है, जैसा कि अन्य लोगों ने उल्लेख किया है। लेकिन मेरे द्वारा ऊपर वर्णित स्मृति अपशिष्ट से बचने के लिए इसके भौतिक लाभ हैं।

बेशक, यह जानना कठिन है कि सबसे लंबा डाक पता क्या है, यही वजह है कि बहुत से लोग एक लंबा VARCHAR चुनते हैं। जो निश्चित रूप से किसी भी पते से अधिक लंबा है। और 255 प्रथागत है क्योंकि यह VARCHAR . की अधिकतम लंबाई है जिसके लिए लंबाई को एक बाइट से एन्कोड किया जा सकता है। यह अधिकतम VARCHAR . भी था MySQL में लंबाई 5.0 से अधिक पुरानी है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में दो टेबल्स की तुलना कैसे करें

  2. त्रुटि:क्लाइंट सर्वर द्वारा अनुरोधित प्रमाणीकरण प्रोटोकॉल का समर्थन नहीं करता है; MySQL क्लाइंट को अपग्रेड करने पर विचार करें

  3. MySQL में प्रति दिन संचयी कुल उपयोगकर्ता कैसे प्राप्त करें

  4. त्रुटि 1022 - लिख नहीं सकता; तालिका में डुप्लिकेट कुंजी

  5. एकल क्वेरी में एकाधिक चयन कथन