代码如下 | 复制代码 |
insert into table value('a','b'); |
但是由于每进行一次insert into 都会对数据库进行一次I/O操作,所以导致这样的循环插入方式变的非常慢
所以,可以使用一条insert into进行批量插入
代码如下 | 复制代码 |
insert into table values('a','b'),('c','d'),('e','f')...('m','n'); |
上面只是最简单的方法下面再看
说明:tb_order_detail_his :7000W记录
tb_order_detail :2000W记录
优化前:
代码如下 | 复制代码 |
INSERT INTO /*+ append */ tablename_his SELECT * FROM tablename PARTITION (TB_ORDER_DE_WAREID40) WHERE ID NOT IN ( SELECT tcc.id FROM tablename PARTITION (TB_ORDER_DE_WAREID40) tcc , tablename_his tcch WHERE tcc.id=tcch.id ) |
在做数据归档时,需要做大数据量的insert,对于insert内容少还是可以胜任的,可当要把200多万的数据归档,2个小时都没有成功,
于是对其优化改造,利用append,parallel,分批处理,nologging方法,使这个200W的数据归档在15分钟就完成
优化后:
通过 mod(tcc.id,10)把内容分10部分提交归档
代码如下 | 复制代码 |
INSERT INTO /*+ append */ tablename_his |
1. 增加hint /*+ append */ --不用在高水位下查找可insert的空间,直接在高水位之上insert
2. 增加hint /*+ parallel(tab,4) */
或者alter session enable/disable parallel dml; ---充分利用系统硬件资源
3. alter table tablename nologging/logging ----关闭表的log服务,减少redo产生
4. 如果业务允许的话,可以先删除索引,insert之后再重建. ---减少在insert时维护索引的开销
5. 可以增加临时中间表 ----减少此事务对undo的使用
6. 增大sort_area_size或PGA ----增加排序空间,避免磁盘操作
7. 优化sql语句本身
8. pl/sql批处理 ---化整为零,把大事务变成零散的小事务
注:能用一句sql,千万别用2句sql
创造与魔法 安卓版v1.0.0750
创造与魔法是一款开放世界手游,在游戏中玩家可探索这个奇妙的世
创造与魔法修改版 最新版v1.0.0750
创造与魔法无限点券版是款探索冒险游戏,该款游戏的操作还是蛮自
战争与文明官方版本 安卓版v1.7.16
战争与文明是一款由上海邮通科技有限公司开发的战争策略游戏,这
迷你世界0元领皮肤无限迷你币版 最新安卓版v1.43.0
迷你世界0元购买皮肤版是这款开放沙盒冒险建造游戏的特殊破解版
创造与魔法无限经验版 安卓版v1.0.0750
创造与魔法无限经验版是款可以改造环境,整个游戏的自由度还是蛮