Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chi phí truy vấn:Bảng tạm thời toàn cầu so với Bộ sưu tập (Mảng ảo)

Bảng tạm thời toàn cầu có thể có số liệu thống kê như bất kỳ bảng nào khác. Trên thực tế, chúng giống như bất kỳ bảng nào khác, chúng có các phân đoạn dữ liệu, chỉ nằm trong vùng bảng tạm thời.

Trong 11g, số liệu thống kê mang tính toàn cầu vì vậy chúng đôi khi gây ra vấn đề với kế hoạch thực hiện. Trong 12c, chúng dựa trên phiên để mỗi phiên có những phiên phù hợp (nếu có).

Cardinality loại bộ sưu tập dựa trên kích thước khối DB và đối với khối 8 kB mặc định là 8168. Nội dung bộ sưu tập được lưu trữ trong PGA. Nó khá phổ biến để gợi ý về bản số khi sử dụng các loại bộ sưu tập trong các truy vấn phức tạp để gợi ý trình tối ưu hóa. Bạn cũng có thể sử dụng giao diện trình tối ưu hóa mở rộng để triển khai cách tính chi phí riêng.

Chỉnh sửa - thêm các bài kiểm tra:

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;

Trong trường hợp này, tốc độ truy cập vào GTT nhanh hơn khoảng gấp đôi so với bộ sưu tập, cca 200 ms so với 400 ms trên máy thử nghiệm của tôi. Khi tôi tăng số hàng lên 10 000 000, tôi nhận được ORA-22813:giá trị toán hạng vượt quá giới hạn hệ thống trên truy vấn thứ hai.



  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 SQL:Cách trả về một số cột riêng biệt

  2. Bảng MERGE, không làm gì khi khớp

  3. Truy xuất IDENTITY được chèn lần cuối của Oracle

  4. Tại sao tôi gặp lỗi Oracle khi gọi một thủ tục với C #?

  5. Lược đồ mặc định trong URL kết nối Oracle