[TL;DR] तारीखों को संगृहीत करने के लिए तिथियों का, संख्याओं को संगृहीत करने के लिए संख्याओं और तारों को संगृहीत करने के लिए उपयोग करें।
Oracle NUMBER को स्टोर करता है डेटा प्रकार 1 बाइट प्रति 2 अंकों के रूप में।
Oracle CHAR को स्टोर करता है डेटा प्रकार 1 बाइट प्रति ASCII वर्ण के रूप में (UTF-8 और अन्य एन्कोडिंग विस्तारित सेट में वर्णों के लिए अधिक ले सकते हैं) और स्ट्रिंग को स्पेस वर्णों के साथ राइट-पैड करेंगे ताकि स्ट्रिंग्स बिल्कुल समान लंबाई की हों।
Oracle VARCHAR2 . को स्टोर करता है डेटा प्रकार 1 बाइट प्रति ASCII वर्ण और स्ट्रिंग लंबाई के लिए एक छोटा ओवरहेड (1 या 2 बाइट्स)।
Oracle DATE को स्टोर करता है डेटा प्रकार 7 बाइट्स
के रूप में (वर्ष के लिए 2 और महीने, दिन, घंटे, मिनट, सेकंड में से प्रत्येक के लिए 1)।
आपके पिछले प्रश्न
पर आधारित ऐसा प्रतीत होता है कि आप year storing संग्रहित कर रहे हैं और quarter और यह मानते हुए कि आपके पास हमेशा 4-अंकीय वर्ष और 1-अंकीय तिमाही होगी:
NUMBER(5,0)3 बाइट लेगा;CHAR(5 CHARACTER)5 बाइट लेगा;VARCHAR2(5 CHARACTER)6 बाइट्स लेगा; औरDATE7 बाइट लेगा।
तो केवल स्मृति को NUMBER(5,0) . मानते हुए सबसे कुशल होगा।
हालांकि
जैसे ही आप संख्या/स्ट्रिंग के रूप में संग्रहीत वर्ष/तिमाहियों पर अंकगणित करना शुरू करते हैं तो आप प्रदर्शन के मुद्दों में आ जाते हैं:
उदाहरण के लिए, अगली तिमाही प्राप्त करना:
- यदि
quarterएकNUMBERहै डेटा प्रकार तो आप उपयोग कर सकते हैं:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 ENDलेकिन जब आप 5 क्वार्टर जोड़ना चाहते हैं या क्वार्टर घटाना शुरू करते हैं तो यह संभाल नहीं पाता है और फिर तर्क बहुत अधिक जटिल होने लगता है। - यदि
quarterएकCHARहै डेटा प्रकार तो आप इसे किसी संख्या या दिनांक में परिवर्तित कर सकते हैं और उन विधियों में से किसी एक का उपयोग कर सकते हैं (स्ट्रिंग हेरफेर के निष्पादक होने की संभावना नहीं है)। - यदि
quarterएकDATEहै तो आपको बसADD_MONTHS( quarter, 3 ). का उपयोग करने की आवश्यकता है ।
DATE विधि स्व-दस्तावेजीकरण है और पहले से मौजूद है जबकि NUMBER विधि आपके QUARTER . के आपके सन्निकटन के लिए केवल एक कस्टम फ़ंक्शन बन जाएगी डेटा प्रकार और एक बार जब आप सभी तुलना और हेरफेर कार्यों को लागू कर लेते हैं, तो आपको DATE को प्रभावी ढंग से फिर से लिखना होगा तिमाहियों के लिए यूडीटी के रूप में डेटा प्रकार और वे कार्य अनुकूलित दिनांक कार्यों की तुलना में कम प्रभावशाली होंगे।
अनुपयुक्त डेटा प्रकारों का उपयोग न करें - बस तिथियों को तिथियों के रूप में संग्रहीत करें; संख्या के रूप में संख्या; और स्ट्रिंग के रूप में स्ट्रिंग।