MyISAM तालिकाओं के लिए, NULL प्रत्येक पंक्ति के लिए प्रत्येक संक्षिप्त स्तंभ (शून्य बिट) के लिए एक अतिरिक्त बिट बनाता है। यदि कॉलम पूर्ण नहीं है, तो जानकारी के अतिरिक्त बिट की आवश्यकता नहीं होती है। हालांकि, यह 8 बिट बाइट्स तक गद्देदार है ताकि आप हमेशा कॉलम की गिनती के लिए 1 + mod 8 बाइट प्राप्त कर सकें। 1
टेक्स्ट कॉलम अन्य डेटाटाइप से थोड़ा अलग हैं। सबसे पहले, तालिका प्रविष्टि के लिए स्ट्रिंग के दो बाइट लंबाई स्ट्रिंग के बाइट्स के बाद होती है और एक संस्करण लंबाई संरचना होती है। न्यूल के मामले में, लंबाई की जानकारी की कोई आवश्यकता नहीं है लेकिन कॉलम संरचना के हिस्से के रूप में इसे किसी भी तरह शामिल किया गया है।
इनो डीबी में, न्यूल में कोई जगह नहीं है: वे बस डेटा सेट में मौजूद नहीं हैं। खाली स्ट्रिंग के लिए भी यही सच है क्योंकि डेटा ऑफ़सेट मौजूद नहीं है। केवल अंतर यह है कि एनयूएलएल के पास नल बिट सेट होगा जबकि खाली तार नहीं होंगे। 2
जब डेटा वास्तव में डिस्क पर रखा जाता है, न्यूल और 'दोनों डेटा प्रकारों में बिल्कुल समान स्थान लेते हैं। हालांकि, जब मूल्य की खोज की जाती है, तो एनयूएलएल की जांच थोड़ा तेज़ होती है और फिर '' की जांच होती है क्योंकि आपको अपनी गणना में डेटा लंबाई पर विचार नहीं करना पड़ता है: आप केवल शून्य बिट की जांच करते हैं।
शून्य और '' अंतरिक्ष मतभेद, शून्य और '' के परिणामस्वरूप जब तक स्तंभ नल या नहीं होने के लिए निर्दिष्ट किया जाता है कोई आकार प्रभाव पड़ता है। यदि कॉलम न्यूल नहीं है, तो केवल माईसाम टेबल में आप कोई peformance अंतर देखेंगे (और फिर, जाहिर है, डिफ़ॉल्ट NULL का उपयोग नहीं किया जा सकता है, इसलिए यह एक महत्वपूर्ण सवाल है)।
असली सवाल तब "कोई मूल्य सेट यहां नहीं" कॉलम की अनुप्रयोग व्याख्या के लिए उबाल जाता है। यदि "" वैध मान है जिसका अर्थ है "उपयोगकर्ता ने यहां कुछ भी दर्ज नहीं किया है" या किसी भी समय, तो डिफ़ॉल्ट NULL बेहतर है क्योंकि आप NULL के बीच अंतर करना चाहते हैं और "" जब रिकॉर्ड दर्ज किया जाता है जिसमें इसका कोई डेटा नहीं होता है।
आम तौर पर, डिफ़ॉल्ट रूप से डेटाबेस को रीफैक्टर करने के लिए डिफ़ॉल्ट रूप से केवल उपयोगी होता है, जब पुराने मानों पर नए मानों को लागू करने की आवश्यकता होती है। उस स्थिति में, फिर से, विकल्प इस बात पर निर्भर करता है कि एप्लिकेशन डेटा का अर्थ कैसे लिया जाता है। कुछ पुराने डेटा के लिए, एनयूएलएल पूरी तरह से उपयुक्त है और सबसे अच्छा फिट (कॉलम पहले मौजूद नहीं था, इसलिए इसमें अब कुल मूल्य है!)। दूसरों के लिए, "" अधिक उपयुक्त है (अक्सर जब प्रश्न SELECT * का उपयोग करते हैं और नल क्रैश समस्याओं का कारण बनता है)।
उलटा-सामान्य शर्तों (और दार्शनिक दृष्टिकोण से) डिफ़ॉल्ट कॉलम के लिए डिफ़ॉल्ट नल को प्राथमिकता दी जाती है क्योंकि यह "कोई मूल्य निर्दिष्ट नहीं" की सर्वोत्तम अर्थपूर्ण व्याख्या देता है।
1 [http://forge.mysql.com/wiki/MySQL_Internals_MyISAM]
2 [http://forge.mysql.com/wiki/MySQL_Internals_InnoDB]
अधिकांश "डिस्क स्थान और प्रदर्शन के लिए बेहतर क्या है" प्रश्नों के साथ: आप न्यूल के साथ एक लाख पंक्तियां क्यों नहीं डालते हैं, कुछ प्रश्नों का परीक्षण करते हैं, और डिस्क स्थान की जांच करते हैं? एस के साथ दोहराएं, और एक बार अपेक्षाकृत मिश्रण के साथ। और उत्तर एसओ पर कुछ यादृच्छिक लड़के की तुलना में अधिक विश्वसनीय है;) – ojrac
हाहा, मुझे अपडेट टिप्पणियां पसंद हैं – Xeoncross