PL/SQL中for循环的替代方案:优化批量数据插入性能
无需循环实现批量数据插入方案
直接用批量关联查询插入替代游标循环,利用SQL的集合操作特性,彻底避免逐行处理带来的性能问题,代码如下:
INSERT INTO final_table_resul_tbl(asset_id, asset, actual_date) SELECT rt.asset_id, rt.asset, rt.actual_date FROM result_tbl rt JOIN param_tbl pt ON rt.asset_id = pt.asset_id AND rt.actual_date = pt.actual_date;
为什么这比循环高效?
数据库对集合式操作有专门的优化,一次性处理所有符合条件的数据,不需要逐行打开游标、执行插入的开销,数据量越大,性能提升越显著。
如果需要处理重复数据(避免目标表插入重复记录)
如果final_table_resul_tbl可能已有相同记录,可以用MERGE语句替代INSERT,确保只插入不存在的数据:
MERGE INTO final_table_resul_tbl ftr USING ( SELECT rt.asset_id, rt.asset, rt.actual_date FROM result_tbl rt JOIN param_tbl pt ON rt.asset_id = pt.asset_id AND rt.actual_date = pt.actual_date ) src ON (ftr.asset_id = src.asset_id AND ftr.actual_date = src.actual_date) WHEN NOT MATCHED THEN INSERT (asset_id, asset, actual_date) VALUES (src.asset_id, src.asset, src.actual_date);
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

