हमारे ग्राहकों DECIMAL(18,0)
में से एक अपने SQL Server 2008R2 डेटाबेस में डेटाटाइप कुछ कॉलम के लिए उपयोग करता है। क्योंकि कॉलम काफी धीरे-धीरे बढ़ता है, उसने हाल ही में DECIMAL(5,0)
कुछ संग्रहण को पुनः प्राप्त करने के लिए डेटाटाइप को बदलने का प्रस्ताव दिया ।
MSDN लाइब्रेरी के अनुसार , DECIMAL(5,0)
डेटाटाइप का संग्रहण स्थान, डेटाटाइप की तरह DECIMAL(9,0)
, 5 बाइट्स है। INT
1 बाइट छोटा है, लेकिन -99,999 के बजाय 99,999 में DECIMAL(5,0)
स्टोर कर सकता है, जो -2 ^ 31 से 2 ^ 31 की रेंज में सब कुछ स्टोर कर सकता है। यहां तक कि सबसे बड़ा DECIMAL
जो 5 बाइट्स में फिट बैठता है ( DECIMAL(9,0)
) केवल पूर्णांकों को रेंज में -999,999,999 में 999,999,999 में स्टोर कर सकता है (जो INT
4 बाइट्स में रेंज ऑफर के आधे से कम है )।
मैं दो का उपयोग कर के "लाभ" के बारे में सोच सकते हैं DECIMAL
से अधिक INT
:
- अधिक भंडारण स्थान का उपयोग किए बिना, पैमाने को बाद में जोड़ने की क्षमता
- डेटा प्रकार में बदलाव के बिना, 38 अंकों तक सटीकता को स्केल करने की क्षमता
लेकिन ये मेरी राय में वास्तविक लाभ नहीं हैं:
- पूर्णांकों में स्केल जोड़ना केवल बहुत कम मामलों में समझ में आता है (ज्यादातर मामलों में जहां पैमाने पर फर्क पड़ता है, इसे पहले भी जोड़ा जा सकता है)
- SQL सर्वर हर सटीक / स्केल संयोजन को एक अलग डेटा प्रकार के रूप में देखता है, इसलिए सटीक या स्केल को बढ़ाते समय डेटाटाइप को अकेला नहीं छोड़ा जाता है।
यह मुझे आश्चर्यचकित करता है: DECIMAL(5,0)
पूर्णांक के लिए डेटाटाइप का अतिरिक्त लाभ क्या है ?
decimal(x,0)
एक पूर्णांक प्रकार के बीच एक और अंतर खुद को अंकगणितीय विभाजन में दर्शाता है। यदि आप एक इंट को एक अंतर से विभाजित करते हैं, तो आपको एक इंट मिलता है। यदि आप एक दशमलव (x, 0) को एक इंट से विभाजित करते हैं, तो आपको एक दशमलव (x + 6,6) मिलता है।