डेटाटाइम 2 (0) बनाम डेटटाइम 2 (2)


16

प्रलेखन के अनुसार datetime2 (लेनदेन-एसक्यूएल) :

स्टोरेज साइज
6 बाइट्स प्रिडिक्शन के लिए 3.
7 बाइट्स प्रीडिसेस 3 और 4 के लिए।
अन्य सभी प्रीलिम्स के लिए 8 बाइट्स की जरूरत होती है।

के आकार datetime2(0), datetime2(1), datetime2(2)(6 बाइट्स) भंडारण की एक ही राशि का उपयोग करें।

क्या मैं यह कहने में सही रहूंगा कि मैं datetime2(2)बिना किसी अतिरिक्त आकार के लागत के साथ सटीक लाभ प्राप्त कर सकता हूं ?

कृपया ध्यान दें:

  • इस कॉलम को PK के साथ कंपाउंड क्लस्टर्ड इंडेक्स (तालिका विभाजन के लिए प्रयुक्त) बनाने के लिए अनुक्रमित किया गया है
  • मुझे मिलीसेकंड की परवाह नहीं है

datetime2(0)जब एक क्लॉज में उपयोग किया जाता है, या एक सूचकांक के माध्यम से मांग करते समय अधिक सीपीयू कुशल होगा ?

यह एक विशाल तालिका है, इसलिए सबसे छोटा अनुकूलन एक बड़ा बदलाव करेगा।

जवाबों:


27

DateTime2 (0), dateTime2 (1), dateTime2 (2), dateTime2 (3) का आकार समान मात्रा में भंडारण का उपयोग करता है। (6 बाइट्स)

क्या मैं यह कहने में सही रहूंगा कि मैं डेटटाइम 2 (3) के साथ जा सकता हूं और बिना किसी अतिरिक्त आकार लागत के सटीक लाभ प्राप्त कर सकता हूं।

नहीं, आपने दस्तावेज़ की गलत व्याख्या की। ध्यान दें कि स्टोरेज साइज 6 बाइट्स को 3 (जोर मेरा) से कम के प्रीडिसेस के लिए नोट करता है । तो 3 के बराबर एक सटीक 7 बाइट्स की आवश्यकता होगी।

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

एप्लिकेशन आवश्यकताएं डेटाबेस में संग्रहीत की जानी चाहिए, जब स्रोत में अधिक सटीक उपलब्ध हो। उदाहरण के लिए, एक ऑर्डर एंट्री के समय के लिए, जहां से SYSDATETIME()उपयोगकर्ताओं को 100 नैनोसेकंड सटीक नहीं चाहिए। फिर से, आवश्यकताओं के अनुसार नए विकास के लिए डेटा प्रकार और सटीक चुनें और आप आमतौर पर अतिरिक्त विचार के बिना इष्टतम प्रदर्शन प्राप्त करेंगे:

  • दिनांक - आपको समय की आवश्यकता नहीं है
  • smalldatetime - आपको सेकंड की आवश्यकता नहीं है
  • datetime2 (0) - आपको भिन्नात्मक सेकंड की आवश्यकता नहीं है
  • डेटटाइम 2 (1-7) - आपको निर्दिष्ट सटीक अंशों की आवश्यकता है
  • डेटाइमऑफ़सेट (4-7) - आपको समय क्षेत्र जागरूकता के साथ दिनांक और समय की आवश्यकता है
  • समय (4-7) - आपको निर्दिष्ट परिशुद्धता के आंशिक अंशों के साथ केवल समय (कोई तारीख) की आवश्यकता है

हालांकि datetime2 नए विकास के लिए सबसे उपयुक्त के रूप में ऊपर सूचीबद्ध है, एक कभी कभी उपयोग करना पड़ सकता datetime , बजाय विरासत datetime अनुप्रयोगों के साथ संगतता के लिए (1/300 आंशिक सेकंड सटीकता के साथ तय हो गई परिशुद्धता 3) इस प्रकार निहित रूपांतरण और अप्रत्याशित तुलना व्यवहार से बचने, लेकिन कम से आंशिक दूसरी सटीकता और बढ़े हुए भंडारण का खर्च।

इस बात पर विचार करें कि आवश्यकता से अधिक सटीक भंडारण करने से विकास लागत भी हो सकती है। यदि कोई समय घटक को केवल दूसरी पूरी आवश्यकता होने पर भिन्नात्मक सेकंडों के साथ संग्रहीत करता है, तो प्रश्नों को अभी भी सही परिणामों को वापस करने के लिए भिन्नात्मक सेकंडों पर विचार करना होगा। उदाहरण के लिए, एक ऐप के साथ जहां उपयोगकर्ता एक यूआई के माध्यम से समय सीमा का चयन करता है जो केवल पूरे सेकंड के लिए अनुमति देता है, ऐप कोड को अंतिम समय सीमा मूल्य में आंशिक सेकंड के लिए खाते में रखने की आवश्यकता होती है और तदनुसार उपयोगकर्ता-आपूर्ति किए गए मूल्य को समायोजित करता है (जैसे WHERE OrderEntryTime BETWEEN '2017-01-11T08:00:00.00.00' AND '2017-01-11T08:59:59.99'या WHERE OrderEntryTime >= '2017-01-11T08:00:00.00' AND OrderEntryTime < '2017-01-11T09:00:00.00')। यह कोड जटिलता जोड़ देगा।


केवल इस छोटे से नोट के लिए इस पुराने धागे में टकराने के लिए क्षमा करें, लेकिन smalldatetime पूरे सेकंड है (यानी hh: mm: ss)।
pgfiore


@pgfiore, प्रलेखन कहा गया एक मिनट सटीकता और आप इसके साथ सही है मिल जाएगा । smalldatetimeSELECT CAST(GETDATE() AS smalldatetime);
डैन गुज़मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.