Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Biaya kueri:Tabel Sementara Global vs. Koleksi (Array Virtual)

Tabel sementara global dapat memiliki statistik seperti tabel lainnya. Sebenarnya mereka seperti tabel lainnya, mereka memiliki segmen data, hanya di tablespace sementara.

Dalam 11g statistik bersifat global sehingga terkadang menyebabkan masalah dengan rencana eksekusi. Dalam 12c mereka berbasis sesi sehingga setiap sesi mendapatkan sesi yang tepat (jika tersedia).

Kardinalitas tipe koleksi didasarkan pada ukuran blok DB dan untuk blok default 8 kB adalah 8168. Konten koleksi disimpan di PGA. Sangat umum untuk mengisyaratkan kardinalitas saat menggunakan tipe koleksi dalam kueri kompleks untuk mengisyaratkan pengoptimal. Anda juga dapat menggunakan antarmuka pengoptimal yang diperluas untuk menerapkan cara sendiri dalam menghitung biaya.

Sunting - tes tambahan:

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;

Dalam hal ini adalah akses ke GTT sekitar dua kali lebih cepat daripada pengumpulan, cca 200 ms vs 400 ms di mesin uji saya. Ketika saya menambah jumlah baris menjadi 10 000 000, saya mendapatkan ORA-22813:nilai operan melebihi batas sistem pada kueri kedua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosedur tersimpan Oracle dengan parameter untuk klausa IN

  2. ORA-28040 Tidak ada protokol otentikasi yang cocok saat menghubungkan dari SQL PLUS ke Oracle 12c DB menggunakan sql plus klien versi 11.1

  3. Perbarui urutan untuk kondisi tertentu - Oracle

  4. Jalankan fungsi pl/sql dengan OracleCommand

  5. Oracle beberapa bidang di Select IN Parameter