Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्वेरी लागत:वैश्विक अस्थायी तालिकाएँ बनाम संग्रह (आभासी सरणी)

वैश्विक अस्थायी तालिकाओं में किसी भी अन्य तालिका की तरह आँकड़े हो सकते हैं। वास्तव में वे किसी भी अन्य तालिका की तरह हैं, उनके पास केवल अस्थायी टेबलस्पेस में डेटा सेगमेंट हैं।

11g में आँकड़े वैश्विक हैं इसलिए वे कभी-कभी निष्पादन योजनाओं के साथ समस्याएँ पैदा करते हैं। 12c में वे सत्र आधारित होते हैं इसलिए प्रत्येक सत्र को उचित (यदि उपलब्ध हो) मिलता है।

संग्रह प्रकार कार्डिनैलिटी डीबी ब्लॉक आकार पर आधारित है और डिफ़ॉल्ट रूप से 8 केबी ब्लॉक 8168 है। संग्रह सामग्री पीजीए में संग्रहीत है। ऑप्टिमाइज़र को इंगित करने के लिए जटिल प्रश्नों में संग्रह प्रकारों का उपयोग करते समय कार्डिनैलिटी को इंगित करना काफी आम है। आप लागत की गणना के लिए अपने तरीके से लागू करने के लिए विस्तारित अनुकूलक इंटरफ़ेस का भी उपयोग कर सकते हैं।

संपादित करें - अतिरिक्त परीक्षण:

CREATE TYPE STRINGTABLE IS TABLE OF VARCHAR2(255);
CREATE GLOBAL TEMPORARY TABLE TMP (VALUE VARCHAR2(255));

INSERT INTO TMP SELECT 'Value' || LEVEL FROM DUAL CONNECT BY LEVEL <= 1000000;

DECLARE
    x STRINGTABLE;
    cnt NUMBER;
BEGIN
    SELECT VALUE BULK COLLECT INTO x FROM TMP;

    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSTIMESTAMP, 'MI:SS.FF3'));

    SELECT SUM(LENGTH(VALUE)) INTO cnt FROM TMP;

    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSTIMESTAMP, 'MI:SS.FF3'));

    SELECT SUM(LENGTH(COLUMN_VALUE)) INTO cnt FROM TABLE(x);

    DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSTIMESTAMP, 'MI:SS.FF3'));
END;

इस मामले में मेरी परीक्षण मशीन पर संग्रह की तुलना में लगभग दुगनी तेजी से जीटीटी तक पहुंच है, सीसीए 200 एमएस बनाम 400 एमएस। जब मैंने पंक्तियों की संख्या बढ़ाकर 10,000,000 कर दी, तो मुझे ORA-22813:ऑपरेंड मान दूसरी क्वेरी पर सिस्टम की सीमा से अधिक हो गया।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle सेट ऑपरेटर्स

  2. ORA-01000:स्प्रिंग SimpleJDBCCall का उपयोग करते समय अधिकतम खुले कर्सर पार हो गए

  3. PL/SQL डेवलपर डिस्प्ले हिब्रू वर्णों को ठीक से प्रदर्शित नहीं करता है

  4. simpleJdbcCall कॉलिंग Pl/SQL प्रक्रिया -- ORA-22922 गैर-मौजूद LOB मान

  5. ईएवी तालिका के साथ जुड़ें/पिवट आइटम