2009-08-31 18 views
11

आपके लिए डेटाबेस डिज़ाइन/प्रदर्शन गुरु के लिए।एसक्यूएल सर्वर डेटाटाइम बनाम इंट कुंजी प्रदर्शन

यदि आपके पास एक डेटाबेस है जो वित्तीय वर्ष की अवधि के लिए वित्तीय डेटा ट्रैक करने का इरादा रखता है, तो क्या यह बेहतर/अधिक प्रदर्शन/डैरेंज प्रकार की खोजों को अधिक स्पष्ट करता है जैसे कि एक्स और वाई के बीच भुगतानडेट या यह इंट- उसमें परिभाषित वित्तीय वर्ष की अवधि के साथ कुंजी आधारित तालिका और भुगतान तिथि और भुगतान कुंजी के साथ भुगतान तालिका टैग करें, तो जहां खंड है FiscalPeriodID = X?

मुझे यकीन है कि छोटे डेटासेट के लिए कोई फर्क नहीं पड़ता है, लेकिन मान लें कि यह डेटा लाखों पंक्तियों में होगा।

उत्तर

18

मैं दैनिक आधार पर लाखों पंक्तियों में गोदामों से निपटता हूं, और हमें लगता है कि स्मार्ट डेट कुंजी जाने का रास्ता है। यह YYYYMMDD के प्रारूप में है। तो 2008 के सभी को खोजने के लिए, तुम क्या चाहते हैं:

select 
    * 
from 
    gl 
where 
    postdate between 20080101 and 20081231 

एक अनुक्रमित स्तंभ इस हटकर तेज है के साथ, यहां तक ​​कि एक अरब पंक्तियों में। यह एक तिथि तालिका को भी इंगित कर रहा है, इसलिए हम सप्ताह के दिन, महीनों के नाम, या उसमें शामिल होने वाली तिथियों के बारे में और भी जानकारी के बारे में जानकारी दे सकते हैं।

बेशक, इन गोदामों को आमतौर पर एसएसएएस क्यूब्स (ओलाप डेटाबेस) का समर्थन करने के लिए बनाया जाता है, और इसलिए तिथि तालिका हमारी तिथि आयाम बन जाती है। डेटाटाइम की तुलना में इंट पर जुड़ना बहुत तेज़ है।

+0

मानव संसाधन विकास मंत्री, हाँ, अब मैं ले जा सकते हैं कि आप क्या लिखा है और अनुसंधान के लिए ऐसा लगता है कि यह एक सुंदर मानक समाधान है, खासकर क्यूब्स में। – Eric

+1

'time' भाग के बारे में क्या? अगर मुझे समय भी स्टोर करना है तो क्या होगा? क्या समय के लिए एक अलग क्षेत्र का उपयोग करना अच्छा है और इसे अंतराल के रूप में स्टोर करना और आवश्यकता होने पर कनवर्ट करना अच्छा है? – Mahmoodvcs

+1

डेविड स्टीन ने इसके बारे में एक लेख लिखा था। उनका कहना है कि दिनांक क्षेत्र में एसक्यूएल 2008 में बेहतर प्रदर्शन है। यूआरएल: [http://www.made2mentor.com/2011/05/date-vs-integer-datatypes-as-primary-key-for-date-dimensions/] (http://www.made2mentor.com/2011/05/date-vs-integer-datatypes-as-primary-key-for-date-dimensions/) – Mahmoodvcs

0

आप बड़े वित्तीय डेटासेट के साथ क्या कर रहे हैं 'डेटा क्यूब्स' है।

यह मूल रूप से आपको प्रत्येक अवधि के लिए आवश्यक रिपोर्ट तैयार करने की प्रक्रिया को संदर्भित करता है, इसलिए आपको इन where खंडों को करने की आवश्यकता नहीं है, आप बस उस अवधि के लिए डेटा देखते हैं।

तो इससे कोई फर्क नहीं पड़ता। हालांकि इसे स्टोर करें, और एक ऐतिहासिक डेटाबेस को कार्यान्वित करें जो लंबी अवधि की रिपोर्टिंग के लिए अधिक कुशल होगा।

मैं सीधे प्रवेश के खिलाफ संग्रहीत तारीख के साथ जाऊंगा।

0

यदि आप smalldatetime का उपयोग कर सकते हैं तो यह पूर्णांक के समान आकार है - दोनों 4 बाइट्स। और हुड के नीचे डेटाटाइम डेटाटाइप पूर्णांक हैं।

smalldatetime के पहले 2 बाइट्स शायद 1/1/1900 से गुजरने वाले दिनों की संख्या और दूसरे 2 बाइट मध्यरात्रि से सेकंड की संख्या की तरह कुछ हैं। (यह सटीक नहीं हो सकता है लेकिन आप बिंदु प्राप्त करते हैं।) तो ये डेटाटाइप बहुत कुशल हैं।

मुझे लगता है कि स्मालडटाइम फ़ील्ड के खिलाफ एक क्लॉज प्रदर्शन ठीक होगा।

2

भी विचार क्या एक वास्तविक दिनांक या smalldatetime क्षेत्र की तिथि भाग प्रभाव में है ... 4 बाइट 1 के बाद से दिनों की संख्या का प्रतिनिधित्व जनवरी 1900

पूर्णांक यह एक वास्तविक दिनांक के लिए डाली जा सकती है निस्संदेह, बहुत तेज़, (चूंकि यह 8-बाइट डेटटाइम मान के पहले चार बाइट्स के समान सटीक मान है)

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

इसके अलावा, एक 32-बिट (4-बाइट) पूर्णांक के हर possile मूल्य है एक वैध दिनांक (आधी रात) आंतरिक एसक्यूएल सर्वर Datetime डेटाप्रकार

संबंधित मुद्दे