Pra*_*ash 4 sql oracle performance plsql
我们一直在使用临时表来存储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
Run Code Online (Sandbox Code Playgroud)
插入
-- 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
Run Code Online (Sandbox Code Playgroud)
直接路径插入 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9074 次 |
| 最近记录: |