Globalne tabele tymczasowe mogą mieć statystyki jak każda inna tabela. W rzeczywistości są one jak każda inna tabela, mają segmenty danych, tylko w tymczasowej przestrzeni tabel.
W 11g statystyki są globalne, więc czasami powodują problemy z planami wykonania. W 12c są one oparte na sesjach, więc każda sesja otrzymuje odpowiednie (jeśli są dostępne).
Kardynalność typu kolekcji jest oparta na rozmiarze bloku DB i domyślnie blok 8 kB to 8168. Zawartość kolekcji jest przechowywana w PGA. Podczas używania typów kolekcji w złożonych zapytaniach dość często wskazuje się na kardynalność, aby wskazać optymalizatorowi. Możesz także użyć rozszerzonego interfejsu optymalizatora do wdrożenia własnego sposobu obliczania kosztów.
Edycja - dodane 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;
W tym przypadku dostęp do GTT jest około dwa razy szybszy niż do pobrania, około 200 ms w porównaniu do 400 ms na moim komputerze testowym. Kiedy zwiększyłem liczbę wierszy do 10 000 000, otrzymałem ORA-22813:wartość operandu przekracza limity systemowe przy drugim zapytaniu.