2013-03-29 7 views
7

में वैश्विक टेम्पलेटरी टेबल बनाएं, डीबी 2 में GLOBAL TEMPORARY TABLE बना रहा हूं। और जब मैंने सर्फ किया तो मुझे बनाने के लिए दो तरीके मिले। 1. घोषित करें 2. बनाएं।डेक्लेयर ग्लोबल टेम्पलेटरी टेबल बनाम डीबी 2

1. DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP 
     (EMPNO CHAR(6) NOT NULL, 
     SALARY DECIMAL(9, 2), 
     BONUS DECIMAL(9, 2), 
     COMM DECIMAL(9, 2)) WITH REPLACE ON COMMIT PRESERVE ROWS ; 

2. CREATE GLOBAL TEMPORARY TABLE TMPDEPT 
     (TMPDEPTNO CHAR(3)  NOT NULL, 
     TMPDEPTNAME VARCHAR(36) NOT NULL, 
     TMPMGRNO CHAR(6), 
     TMPLOCATION CHAR(16)) ON COMMIT PRESERVE ROWS ; 

और आईबीएम साइट से मैं एक जानकारी है कि बनाने के अपने लगातार किया जा रहा है के बाद से सबसे अच्छा है मिल गया, सभी उपयोगकर्ता सत्र स्टार्टअप और कई और अधिक फायदे में यह घोषणा करने के लिए बिना एक ही तालिका परिभाषा का उपयोग करने की अनुमति देता है।

लिंक: http://www.ibm.com/developerworks/data/library/techarticle/dm-0912globaltemptable/

और मैं अधिक बनाने का उपयोग करने में कुछ प्रश्नों था की घोषणा:

  1. मैं Replace कीवर्ड जबकि CREATE GLOBAL TEMPORARY TABLE का उपयोग कर नहीं पा सके।

  2. पर विचार एक परिदृश्य, एक कनेक्शन खोलने रहा हूँ और कि संग्रहित प्रक्रिया के भीतर एक संग्रहीत प्रक्रिया,
    क्रियान्वित वैश्विक अस्थायी तालिका बनाने रहा हूँ और साथ कि संग्रहित प्रक्रिया में एक और संग्रहित प्रक्रिया बोल रहा हूँ जो फिर same अस्थायी बनाएं है टेबल स्टेटमेंट .. इस मामले में क्या होगा .. क्या यह कोई त्रुटि फेंकता है क्योंकि दोनों टेबल नाई समान हैं और एकल कनेक्शन के भीतर?

  3. घोषित सत्र और निर्माण नहीं है ?? क्या यह लगातार से संबंधित है ??

  4. प्रदर्शन के अनुसार जो बेहतर है? अस्थायी घोषित करें या अस्थायी बनाएं?

  5. घोषणा/निर्माण के सर्वोत्तम उपयोग के लिए कुछ परिदृश्य सुझाएं !!

उत्तर

7

good article from Craig S. Mullins है जो दोनों के बीच प्रमुख अंतर को कवर करता है। ज्यादातर उद्देश्यों के लिए, वे वही काम करते हैं।

निर्मित टेम्प टेबल्स DSNDB07 में बनाए गए हैं, जो काम कर रहे फ़ाइल डेटाबेस (SQL संग्रहण कथन के दौरान उपयोग किया जाने वाला वही भंडारण क्षेत्र है जो काम करने की आवश्यकता है)। घोषित टेम्प टेबल्स को अस्थायी टेबलस्पेस में संग्रहीत किया जाता है जिसे आपको बनाना है।

वहाँ सीटीटी के लिए कुछ विपक्ष हैं:

  • क्योंकि वे लगातार नहीं हैं, कुछ विशिष्ट डेटाबेस कार्यों लॉकिंग, प्रवेश, और वसूली सहित बनाया अस्थायी तालिकाओं के लिए लागू नहीं है।

  • इंडेक्स बनाए गए अस्थायी तालिकाओं पर नहीं बनाए जा सकते हैं, इसलिए सभी एक्सेस एक पूर्ण तालिका स्कैन द्वारा है।

  • निर्मित अस्थायी तालिकाओं पर बाधाएं नहीं बनाई जा सकती हैं।

  • एक नल एक निर्मित डिफ़ॉल्ट अस्थायी तालिका के कॉलम के लिए एकमात्र डिफ़ॉल्ट मान है।

  • निर्मित अस्थायी तालिकाओं को डीबी 2 उपयोगिताओं द्वारा संदर्भित नहीं किया जा सकता है।

  • निर्मित अस्थायी तालिकाओं को अद्यतन विवरण के ऑब्जेक्ट के रूप में निर्दिष्ट नहीं किया जा सकता है।

  • किसी निर्मित अस्थायी तालिका से हटाते समय, सभी पंक्तियां हटा दी जानी चाहिए।

  • हालांकि निर्मित अस्थायी तालिकाओं पर विचार बनाए जा सकते हैं, के साथ विकल्प विकल्प निर्दिष्ट नहीं किया जा सकता है।

डीटीटी आम तौर पर बहुत अधिक लचीले होते हैं:

  • घोषित अस्थायी तालिकाओं अनुक्रमित है और जाँच की कमी उन पर परिभाषित कर सकते हैं।

  • आप अद्यतन विवरण जारी कर सकते हैं और घोषित अस्थायी तालिका के विरुद्ध DELETE कथन स्थानांतरित कर सकते हैं।

  • आप घोषित अस्थायी तालिका के कॉलम को स्पष्ट रूप से परिभाषित कर सकते हैं और एक चयन से परिणाम तालिका का उपयोग कर सकते हैं।

अब आप अपने गिने प्रश्नों के लिए

:

1. & 2. वहाँ एक नहीं है। मेरा मानना ​​है (और मुझे 100% यकीन नहीं है कि यह सही है, हमारी दुकान सभी मामलों में डीटीटी का काफी उपयोग करती है) कि एक बार सीटीटी घोषित किया जाता है ( डीबीए द्वारा), और फिर एप्लिकेशन प्रोग्रामर इसका उपयोग किसी भी रूप में कर सकते हैं सत्र। प्रत्येक कनेक्शन की अपनी प्रतिलिपि होगी, और एक बार एप्लिकेशन डिस्कनेक्ट हो जाने पर, उस सत्र में उस सीटीटी में संग्रहीत डेटा दूर हो जाएगा।

3. SESSION डीटीटी के लिए केवल स्कीमा पहचानकर्ता है। यह दिखाता है कि यह एक अस्थायी तालिका है जो जारी नहीं है।

4. मुझे लगता है कि दोनों के पास एक ही प्रदर्शन होगा। वे सामान्य टेबल की तुलना में तेज होंगे, क्योंकि लॉकिंग, लॉगिंग, रिकवरी इत्यादि लागू नहीं होंगे।

5. सामान्य तौर पर, मुझे लगता है कि DTTs जाने का रास्ता है, लेकिन CTTs उपयोगी होते हैं (के रूप में क्रेग ने अपने लेख में कहते हैं) कहते थे:

(CTTs) मुख्य रूप से जब कोई अद्यतन करने विचार किया जाना चाहिए अस्थायी डेटा की आवश्यकता है और अस्थायी डेटा तक पहुंच पूरी तरह अनुक्रमिक है।

0
  1. हमने पाया है कि बनाया गया अस्थायी टेबल्स है - हमारे मामले में - प्रदर्शन अब तक DTTs की तुलना में बेहतर। यह एक अपवाद हो सकता है (यह निर्भर करता है), लेकिन परिवर्तन के लिए प्रोत्साहन डीटीटी के साथ किए जा रहे वृद्धिशील बाइंडों की संख्या देख रहा था। प्रत्येक लेनदेन की आवश्यकता 23 temp टेबल। हमने समानांतर परीक्षण चलाया और पाया कि सीटीटी के परिणामस्वरूप दोनों सीपीयू और इन_DB2 समय में भारी बूंदें हुईं।हमने लॉक/लॉच में भी बूंदों को देखा और पाया कि सीटीटी के साथ हमारे जीआईआईपी सीपीयू ने हमारे जीपी सीपीयू से अधिक होना शुरू किया, जिससे सभी खुश हो जाते हैं।

हमें डीटीटी इंडेक्स की आवश्यकता नहीं थी या एक्सेस अपडेट नहीं किया गया था और किसी भी आरआई के लिए इसका कोई उपयोग नहीं था।

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