Globální dočasné tabulky mohou mít statistiku jako kterákoli jiná tabulka. Ve skutečnosti jsou jako každá jiná tabulka, mají datové segmenty, jen v dočasném tabulkovém prostoru.
V 11g jsou statistiky globální, takže někdy způsobují problémy s prováděcími plány. V 12c jsou založeny na relaci, takže každá relace dostane ty správné (pokud jsou k dispozici).
Mohutnost typu kolekce je založena na velikosti bloku DB a pro výchozí blok 8 kB je 8168. Obsah kolekce je uložen v PGA. Je docela běžné naznačit mohutnost při použití typů kolekcí ve složitých dotazech k nápovědě pro optimalizátor. Můžete také použít rozšířené rozhraní optimalizátoru pro implementaci vlastního způsobu výpočtu nákladů.
Upravit - přidány testy:
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;
V tomto případě je přístup k GTT asi dvakrát rychlejší než ke sběru, cca 200 ms vs. 400 ms na mém testovacím stroji. Když jsem zvýšil počet řádků na 10 000 000, dostal jsem ORA-22813:hodnota operandu překračuje systémové limity na druhý dotaz.