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

Oracle 11g - cách chèn nhiều hàng hiệu quả nhất

Bạn có thể thử chèn đường dẫn trực tiếp để tăng tốc hoạt động, nhưng đối với 100 bản ghi, chèn đường dẫn thông thường phải đủ nhanh và có vẻ như vấn đề là về việc khóa bảng trong khi chèn vào nhật ký từ một số lượng lớn các nguồn.

Để hướng dẫn Oracle sử dụng chèn đường dẫn trực tiếp, bạn phải xác định rõ PHỤ LỤC hoặc APPEND_VALUES gợi ý tùy thuộc vào cú pháp câu lệnh chèn. Ví dụ:

insert /*+ APPEND */ 
into multi_insert(val_1, val_2)
select * from (
  select 100,    20 from dual union all
  select 21,      2 from dual union all
  select 321,    10 from dual union all
  select 22,     13 from dual union all
  select 14,    121 from dual union all
  select 11,    112 from dual union all
  select 112,    23 from dual union all
  select 132,  2323 from dual union all
  select 121,    34 from dual union all
  select 24333, 333 from dual union all
  select 1232, 3434 from dual union all
  select 4554, 3434 from dual union all
  select 3434,  211 from dual union all
  select 3434, 1233 from dual union all
  select 12,     22 from dual union all
  select 356,   233 from dual union all
  select 9347,   23 from dual union all
  select 8904,  245 from dual union all
  select 342,  4545 from dual union all
  select 453,   233 from dual
)

Nếu câu lệnh chèn bắt nguồn từ mã PL / SQL thì bạn có thể sử dụng chèn hàng loạt với câu lệnh forall để cải thiện hiệu suất ( SQLFiddle ):

declare
  type TRowList is table of multi_insert%rowtype index by binary_integer;

  vRowList TRowList;
  vRow     multi_insert%rowtype;
begin


  vRow.val_1 := 100;
  vRow.val_2 := 20;
  vRowList(0) := vRow;

  vRow.val_1 := 21;
  vRow.val_2 := 2;
  vRowList(1) := vRow;

  vRow.val_1 := 321;
  vRow.val_2 := 10;
  vRowList(2) := vRow;

  -- ...

  forall vIdx in vRowList.first .. vRowList.last
        insert /*+ APPEND_VALUES */  -- direct path insert
        into multi_insert values vRowList(vIdx);

end;


  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 11g Tương thích ngược với các bản phát hành oracle cũ hơn

  2. Cập nhật cột tập hợp bảng bằng để chọn nơi id khớp với bên ngoài truy vấn trong oracle

  3. Chuyển đổi trường ngày giờ thành trường ngày tháng trong SQL (Oracle)

  4. Lỗi IO:Đã hết thời gian đọc Socket. Những lý do là gì?

  5. Làm thế nào để tìm các phụ thuộc bên trong một gói oracle?