2010-12-28 16 views
13

संभव डुप्लिकेट:
Space used by nulls in databaseक्या शून्य मान भंडारण स्थान को बचाते हैं?

क्या भंडारण स्थान की दृष्टि से और अधिक कुशल है?

  • nullable int कॉलम नल से भरा कॉलम।
  • एक int शून्य से भरा कॉलम।

मुझे पता है कि एक शून्य कॉलम अपने शून्य स्थिति को संग्रहीत करने के लिए 1 अतिरिक्त बिट जानकारी लेता है, लेकिन शून्य मानों को डेटाबेस को किसी int के लिए 32 बिट्स आवंटित करने से बचाने में मदद करता है जो शून्य है? भंडारण स्थान की आवश्यकता हमेशा एक ही है पूर्णांक है कि क्या मान शून्य है या नहीं की परवाह किए बिना

+0

मैं 2008 आर 2 के साथ काम कर रहा हूं, लेकिन यदि अन्य संस्करण अलग-अलग व्यवहार करते हैं, तो यह जानना अच्छा लगेगा। –

+0

डी ओह, मैंने "शून्य भंडारण" की खोज की, लेकिन "शून्य स्थान" नहीं। डुप्लिकेट के लिए सहमत, उत्तर इस सवाल का जवाब देते हैं। –

उत्तर

14

नल की तरह निश्चित चौड़ाई क्षेत्रों के लिए (शून्य अर्थ विज्ञान और बातिल का अर्थ इस प्रश्न के लिए महत्वपूर्ण नहीं हैं)।

परिवर्तनीय चौड़ाई नलाने योग्य फ़ील्ड के लिए मान 'न्यूल' भंडारण स्थान के शून्य बाइट लेता है (बिट को अनदेखा करने के लिए यह अनदेखा करता है कि मूल्य शून्य है या नहीं)।

+0

क्या इसके लिए कोई संदर्भ है या आप इसे प्रयोगात्मक सबूत से जानते हैं? –

+7

मुझे पता है क्योंकि यह लगभग हर हफ्ते पूछा जाता है। ;-) –

+0

मुझे शायद समझ में नहीं आ रहा है * जब * कॉलम (या, वास्तव में एक पंक्ति) के लिए स्थान SQL सर्वर द्वारा आरक्षित है, लेकिन तथ्य यह है कि एक विशाल डेटाबेस में एक नाली कॉलम जोड़ना वास्तव में तात्कालिक है और करता है ऐसा लगता है कि कोई आवंटन शामिल नहीं है (जो तब होता है जब आप डिफ़ॉल्ट मान के साथ न्यूल निर्दिष्ट करते हैं, उदाहरण के लिए)। क्या इसका मतलब यह है कि SQL सर्वर इस नए कॉलम के लिए स्पेस का एक गुच्छा आवंटित करेगा जब आप पहली बार उस मान वाली पंक्ति लिखने का प्रयास करेंगे? – Groo

4

यदि आप SQL Server 2008 का उपयोग कर रहे हैं, और कॉलम में बड़ी संख्या में NULL मान होने की उम्मीद है, तो मैं आपको investigate Sparse Columns का सुझाव दूंगा। वे नल मूल्यों को संग्रहीत करने के लिए अनुकूलित कर रहे हैं।

3

एसक्यूएल सर्वर 2008 ने मुख्य रूप से नल के कॉलम के लिए Sparse columns पेश किया।

एक पंक्ति के लिए एक स्पेयर कॉलम, जो एनयूएलएल स्टोरेज के 0 बिट्स का उपयोग करता है। लेकिन यदि कोई मूल्य है तो आप 4 बाइट पेनल्टी का भुगतान करते हैं।

3

0 शून्य नहीं है। यदि आपके पास फ़ील्ड के लिए कोई मूल्य नहीं है, तो वहां शून्य न रखें! मैं आपको नहीं बता सकता कि कितनी बार मैं उन बगों में आया हूं जो अनिवार्य रूप से अपरिहार्य हैं क्योंकि हमारे पास यह जानने का कोई तरीका नहीं है कि उत्पादन डेटाबेस में शून्य वास्तविक शून्य या नकली नल थे। नल को गले लगाओ - हां, उन्हें थोड़ा और कोडिंग की आवश्यकता है, लेकिन वैसे भी उन्हें गले लगाओ।

+1

इस मामले में फ़ील्ड सिर्फ एक एप्लिकेशन ध्वज है, और शून्य या शून्य के लिए जांच एक जैसी है, इसलिए केवल भंडारण विचार। –

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