首页 > 数据库 > Oracle > 通用SQL优化经典等价改写【三】——插入提速
往期回顾:
-- 准备1000万行测试数据
CREATE TABLE source_data AS
SELECT ROWNUM id, LPAD('X', 100, 'X') data
FROM dual CONNECT BY LEVEL <= 10000000;
-- 创建目标表
CREATE TABLE target_normal (id NUMBER, data VARCHAR2(100));
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ log file sync 325 5.2 16 53.6 db file sequential read 856 2.4 3 24.7 CPU time 1.8 18.6 log file parallel write 325 0.2 1 2.1
-- 执行时间: 2.8秒 INSERT /*+ APPEND */ INTO target_normal SELECT * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ direct path write 187 1.3 7 46.4 log file sync 92 0.9 10 32.1 CPU time 0.5 17.9 direct path read 125 0.1 1 3.6
-- 执行时间: 0.9秒 INSERT /*+ APPEND */ INTO target_normal SELECT /*+ PARALLEL(8) */ * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ PX Deq: Execute Reply 144 0.3 2 33.3 direct path write 352 0.3 1 33.3 CPU time 0.2 22.2 PX Deq Credit: send blkd 8 0.1 13 11.1
-- 执行时间: 0.5秒 ALTER TABLE target_normal NOLOGGING; INSERT /*+ APPEND */ INTO target_normal SELECT /*+ PARALLEL(8) */ * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ direct path write 352 0.3 1 60.0 CPU time 0.2 40.0
INSERT /*+ APPEND */ INTO target SELECT /*+ PARALLEL(8) */ * FROM source;
ALTER TABLE target NOLOGGING; INSERT /*+ APPEND */ INTO targetSELECT /*+ PARALLEL(8) */ * FROM source;
BEGIN FOR i IN 1..10 LOOP INSERT INTO target SELECT * FROM source WHERE batch_id = i; COMMIT; END LOOP; END;
-- 将数据加载到临时表 INSERT /*+ APPEND PARALLEL(8) */ INTO temp_table SELECT * FROM source;-- 交换分区(几乎瞬时完成) ALTER TABLE main_table EXCHANGE PARTITION part1 WITH TABLE temp_table;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3082955/ ,如需转载,请注明出处,否则将追究法律责任。