gpt4 book ai didi

sql - pl/sql forall insert 和plain SQL insert 的查询性能差异

转载 作者:行者123 更新时间:2023-12-04 22:16:54 24 4
gpt4 key购买 nike

我们一直在使用临时表来存储 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

关于sql - pl/sql forall insert 和plain SQL insert 的查询性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com