当前位置 : 主页 > 网络安全 > 测试自动化 >

查询性能差异pl / sql forall insert和普通SQL插入

来源:互联网 收集:自由互联 发布时间:2021-06-22
我们一直在使用临时表来存储pl / sql存储过程中的中间结果.任何人都可以判断通过pl / sql进行批量收集插入与普通SQL插入之间是否存在性能差异. 插入[表名] [选择查询返回大量数据] 要么
我们一直在使用临时表来存储pl / sql存储过程中的中间结果.任何人都可以判断通过pl / sql进行批量收集插入与普通SQL插入之间是否存在性能差异.

插入[表名] [选择查询返回大量数据]

要么

[选择查询返回大量数据]的光标

打开游标

获取游标批量收集到集合中

使用FORALL执行插入

以上哪两个选项最好插入大量的临时数据?

您的问题的一些实验数据(Oracle 9.2)

批量收集

DECLARE 
  TYPE t_number_table IS TABLE OF NUMBER;
  v_tab t_number_table;
BEGIN
  SELECT ROWNUM
  BULK COLLECT INTO v_tab
  FROM dual
  CONNECT BY LEVEL < 100000;

  FORALL i IN 1..v_tab.COUNT
    INSERT INTO test VALUES (v_tab(i));
END;
/
-- 2.6 sec

插入

-- test table 
CREATE global TEMPORARY TABLE test (id number)
ON COMMIT preserve ROWS;

BEGIN
  INSERT INTO test
  SELECT ROWNUM FROM dual
  CONNECT BY LEVEL < 100000;
END;
/
-- 1.4 sec

直接路径插入
http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c21dlins.htm

BEGIN
  INSERT /*+ append */ INTO test
  SELECT ROWNUM FROM dual
  CONNECT BY LEVEL < 100000;
END;
/
-- 1.2 sec
网友评论