कोई नुकसान, उपयोग टाइमस्टैम्प (9) अगर यह समझ में आता है कर रहे हैं।
टाइमस्टैम्प (9) और टाइमस्टैम्प (1) अंतरिक्ष की एक ही राशि का उपयोग करें, और उनके प्रदर्शन समान है। मुझे केवल एक मामला मिल सकता था जहां प्रदर्शन अंतर था, और उस मामले में टाइमस्टैम्प (9) वास्तव में टाइमस्टैम्प (1) से तेज था।
(मैं आप उबाऊ कोड टाइमस्टैम्प (1) और टाइमस्टैम्प (9) कॉलम में डालने और उन पर विभिन्न संचालन की तुलना में कई लाइनों को छोड़ देंगे।)
यह दर्शाता है कि वे का एक ही राशि का उपयोग अंतरिक्ष (कई मूल्यों डालने और dba_segments की तुलना):
--Create tables with timestamps and populate them with the same data (with different precision)
--Set initial and next to a low value so we can closely check the segment size)
create table timestamp1 (t1 timestamp(1), t2 timestamp(1), t3 timestamp(1), t4 timestamp(1), t5 timestamp(1))
storage(initial 65536 next 65536);
insert into timestamp1
select current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1), current_timestamp(1)
from dual connect by level <= 100000;
create table timestamp9 (t1 timestamp(9), t2 timestamp(9), t3 timestamp(9), t4 timestamp(9), t5 timestamp(9))
storage(initial 65536 next 65536);
insert into timestamp9
select current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9), current_timestamp(9)
from dual connect by level <= 100000;
--Segment size is identical
select segment_name, bytes from dba_segments where segment_name in ('TIMESTAMP1', 'TIMESTAMP9');
--SEGMENT_NAME BYTES
--TIMESTAMP1 8388608
--TIMESTAMP9 8388608
यह वह जगह है जहां टाइमस्टैम्प (9) तेजी से होता है, जब CURRENT_TIMESTAMP का उपयोग, जो आप शायद कुछ बिंदु पर उपयोग करने के लिए डेटा उत्पन्न करने की आवश्यकता होगी। लेकिन हम केवल 100K टाइमस्टैम्प उत्पन्न करने के लिए मेरे धीमे डेस्कटॉप पर लगभग 0.175 और 0.25 सेकंड के बीच के अंतर के बारे में बात कर रहे हैं। मुझे यकीन नहीं है कि टाइमस्टैम्प (9) तेज क्यों है, शायद टाइमस्टैम्प हमेशा टाइमस्टैम्प (9) के रूप में उत्पन्न होते हैं और फिर अन्य परिशुद्धताओं के लिए गोल होते हैं?
--current_timestamp(9) is slightly faster than current_timestamp(1)
select count(*) from
(
select *
from dual
--where current_timestamp(9) = current_timestamp(9)
where current_timestamp(1) = current_timestamp(1)
connect by level <= 100000
);
संपादित करें: प्रदर्शन अंतर 10 जी में मौजूद है लेकिन 11 जी नहीं है।
टाइमस्टैम्प (1) प्रदर्शन परिप्रेक्ष्य से TIMESTAMP (9) से कितना सटीक है? क्या दूसरे अंश एक पूर्णांक के रूप में संग्रहीत नहीं हैं, इसलिए उदाहरण के लिए खोजों में सीपीयू को बिल्कुल प्रभावित नहीं करना चाहिए। क्या आप सुनिश्चित हैं कि TIMESTAMP (1) TIMESTAMP (9) से आंतरिक रूप से कम स्मृति पर कब्जा कर लेता है? – Leonid
आप बस बिंदु मारा! एसक्यूएल घोषणात्मक है, नहीं, आपको कोई गारंटी नहीं है कि TIMESTAMP (1) TIMESTAMP (9) से छोटा है। उदाहरण के लिए, 64-बिट प्लेटफ़ॉर्म के लिए ओरेकल सभी टाइमस्टैम्प को स्टोर करने का निर्णय ले सकता है, चाहे आपकी पसंद चाहे, 64-बिट पूर्णांक आपको बताए बिना। लेकिन अगर आप TIMESTAMP (9) निर्दिष्ट करते हैं, तो ओरेकल आपको अनुदान देता है कि यह कभी भी सटीकता को खो नहीं देगा। प्रदर्शन के बारे में, मैं दोहराता हूं, आप _might_ केवल ** बहुत भारी ** लोड पर प्रदर्शन हानि देखते हैं, जो आपके आवेदन –
के आधार पर असंभव हो सकता है या नहीं, मेरा प्रश्न यह है कि ** टाइमस्टैम्प के मामले में प्रदर्शन हानि ** आ रहा है यदि ओरेकल दूसरे के अंशों को स्टोर करने के लिए पूर्णांक का उपयोग करता है? प्रश्न में TIMESSTAMP ओरेकल प्रकार है और इसका एसक्यूएल के साथ कुछ लेना देना नहीं है। – Leonid