एक स्तंभ के आकार और प्रदर्शन के लिए न्यूमेरिक बनाम पूर्णांक


11

मेरे पास एक एप्लिकेशन है जो एक PostgreSQL तालिका का उपयोग करता है। तालिका बहुत बड़ी है (अरबों पंक्तियों की) और इसमें एक स्तंभ है जो पूर्णांक है।

integer6 अंक अर्थात 0-999,999, कोई नकारात्मक तक हो सकती है।

मैंने इसे बदलने के बारे में सोचा numeric(6,0)

क्या यह एक अच्छा विचार होगा? चाहेंगे numeric(6,0)कम बाइट ले? प्रदर्शन के बारे में कैसे (इस तालिका को बहुत अधिक बताया जा रहा है)?

जवाबों:


11

क्या यह एक अच्छा विचार होगा?

नहीं।

numeric(6,0)कम बाइट ले जाएगा ?

नहीं।

test=> SELECT pg_column_size(INT4 '999999'), pg_column_size(NUMERIC(6,0) '999999');
 pg_column_size | pg_column_size 
----------------+----------------
              4 |             10
(1 row)

प्रदर्शन के बारे में कैसे (इस तालिका को बहुत अधिक बताया जा रहा है)?

और धीमा। इसे बाइनरी-कोडेड दशमलव के रूप में संग्रहीत किया जाता है क्योंकि यह एक मनमाना सटीक मूल्य है।


सभी सहमत हैं, एक साइड नोट संख्यात्मक के रूप में एक फायदा है क्योंकि यह स्वचालित रूप से 0-999999 डोमेन को लागू करता है। हालांकि, अंतर मामले में एक अलग बाधा के साथ हल किया जा सकता है
लेन्नर्ट

1
क्या numericकॉलम बदलने में कोई समस्या है int?
रेसर SQL

@RacerSQL हाँ यदि आपके पास ऐसे मान हैं जो अंतर आकार को ओवरफ्लो करेंगे।
डायलनयुंग

5

निश्चित उत्तर आपके सभी प्रश्नों के लिए नहीं है। इंटेगर हमेशा किसी भी चीज़ के लिए जाने का तरीका है जिसके लिए आप इसका उपयोग कर सकते हैं। (पैसा, उदाहरण के लिए)

इस बारे में जरा एक मिनट सोचो। जब डेटाबेस इंजन एक पूर्णांक का सामना करता है, तो यह इसे बहुत कुशलता से संभालता है क्योंकि इसकी बहुत व्याख्या नहीं है। यह पूरी संख्या है। संख्यात्मक प्रकार एक स्ट्रिंग की तरह अधिक व्यवहार करता है। इंजन को पहले यह पता लगाना होता है कि दशमलव बिंदु से पहले और बाद में कौन से हिस्से हैं, और संख्यात्मक कार्यों को करने के लिए उचित रूप से मालिश करें।

पूर्णांक का उपयोग करना हमेशा संख्यात्मक की तुलना में अधिक कुशल होगा, हालांकि संख्यात्मक प्रकार अक्सर मनुष्यों के लिए अधिक सुविधाजनक होते हैं।


पैसे आने पर मैं असहमत हूं। स्केल किए गए पूर्णांक का उपयोग करना, जैसे कि डिकिंगेंट्स (प्रति डॉलर 1000) स्टोर करना ठीक है, लेकिन अजीब है। यह जल्दी से उपयोग करने के लिए और अधिक व्यावहारिक हो जाता है NUMERIC। पैसे के लिए फ्लोटिंग पॉइंट वैल्यू का उपयोग करने की तुलना में एक स्केल किया गया पूर्णांक बेहतर होता है।
क्रेग रिंगर

2
@ क्रेगिंगर मुझे नहीं लगता कि आप वास्तव में मुझसे असहमत हैं! मैं मानता हूं कि पैसे के लिए दशमलव का उपयोग करना हमेशा डेवलपर के लिए कम अजीब होता है, लेकिन सवाल क्वेरी दक्षता का है, है ना? पूर्णांकों को संभालना हमेशा तेज होता है। इसके अलावा, जब आप बैंकिंग एप्लिकेशन लिखते हैं, तो आप कुछ अजीब दौर के मुद्दों पर विचार कर सकते हैं, जिनके बारे में ज्यादातर लोग ध्यान नहीं देंगे, लेकिन बैंकों के लिए बहुत महत्वपूर्ण हैं। तो, मैं भी पैसे के लिए फ्लोटिंग पॉइंट का उपयोग नहीं करने पर आपसे सहमत हूँ!
स्टुब्स्टेब्लॉगर

1
गोलाई पर अच्छी बात। काश PostgreSQL के पास नीति समर्थन का दौर होता। हालांकि इसे लागू करने के लिए यह पर्याप्त नहीं है;)
क्रेग रिंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.