Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Koszt zapytania:globalne tabele tymczasowe a kolekcje (wirtualne tablice)

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tekst wyszukiwania Oracle w widokach

  2. sprawdź poprawną datę, która jest zadeklarowana w varchar2

  3. JProgressBar nie aktualizuje się, nie mogę znaleźć wskazówki

  4. Kombinacja Oracle SQL MIN i MAX z tej samej tabeli

  5. Hibernacja i sekwencja Oracle