MySQL डिसीमल स्टोरेज - MySQL

हाय मैं DECIMAL का उपयोग कर एक बहुत बड़ी मेज बना रहा हूँजानकारी का प्रकार। यह शुरू होने और वहां से बढ़ने के लिए 50 मिलियन पंक्तियां होगी, इसलिए मैं भंडारण से चिंतित हूं। मुझे DECIMAL की आवश्यकता है क्योंकि मुझे सटीक प्रतिनिधित्व की आवश्यकता है, और दस्तावेज़ीकरण स्पष्ट है कि यदि आप सटीक प्रतिनिधित्व चाहते हैं तो आपको DECIMAL का उपयोग करना होगा।

MySQL मैनुअल DECIMAL स्टोरेज reqs पर काफी स्पष्ट है, बताते हुए:

MySQL 5.0 के रूप में।3, डेसिमल कॉलम के मानों को एक बाइनरी प्रारूप का उपयोग करके दर्शाया जाता है जो नौ दशमलव (बेस 10) अंकों को चार बाइट्स में पैक करता है। प्रत्येक मान के पूर्णांक और fractional भागों के लिए भंडारण अलग से निर्धारित किया जाता है। नौ अंकों में से प्रत्येक के लिए चार बाइट की आवश्यकता होती है, और "बचे हुए" अंकों को चार बाइट्स के कुछ अंश की आवश्यकता होती है। अतिरिक्त अंकों के लिए आवश्यक भंडारण निम्न तालिका द्वारा दिया जाता है।

बाइट्स की बचे हुए अंक संख्या
0 0
1 1
2 1
3 2
4 2

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

तो इसका तात्पर्य है कि एक निर्णायक (12,4) की आवश्यकता होगी:

कुल 10 बाइट्स के लिए "बचे हुए" भाग के लिए पूर्णांक भाग के लिए 8 बाइट और 2 प्रकार।

तो पहला सवाल यह है कि, "डेसीमल (18,4) भंडारण के समान 10 बाइट्स का उपयोग नहीं करेगा? अगर मैं स्टोरेज को सहेजना चाहता हूं, तो मुझे डेसीमल (9,4) तक गिरना होगा और यह विकल्प नहीं है मुझे।

यदि ऐसा है, तो दूसरा सवाल किसी भी विचार से अगर MySQL प्रक्रिया करता हैDECIMAL (12,4) DECIMAL (18,4) से अधिक कुशलतापूर्वक (आंतरिक रूप से)? मुझे नहीं लगता कि सवाल जरूरी उत्तरदायी है, लेकिन सोचा कि मैं इसे एक शॉट दूंगा! शायद किसी ने कुछ प्रकार का बेंचमार्क किया है ...

धन्यवाद।

डॉन

उत्तर:

उत्तर № 1 के लिए -1

इसके बारे में बहुत कुछ सोचने के बिना, मुझे विश्वास हैybercube सही जवाब है। ऐसा कहकर, क्या आप बस एक टेबल बनाकर और कुछ आवेषण करके अपने आप को आगे और आसानी से जांच नहीं सकते? "तालिका की स्थिति दिखाएं" शायद आपके पास आवश्यक जानकारी होनी चाहिए।


जवाब के लिए 4 № 2

आपकी गणना गलत है।

यदि मैं सही ढंग से समझता हूं कि आप जिस पृष्ठ का वर्णन करने के लिए लिंक करते हैं, तो एक डेसिमल (12,4) की आवश्यकता होगी:

पूर्णांक भाग 8 अंक है, इसलिए 4 बाइट्स

आंशिक भाग 4 अंक है, इसलिए 2 बाइट्स।

कुल 6 बाइट्स है।

के लिये DECIMAL(18,4), जिसमें 14 पूर्णांक अंक और 4 आंशिक अंक हैं, इसकी आवश्यकता होगी (4 + 3) + (2) = 9 बाइट्स।


संबंधित सवाल
सबसे लोकप्रिय