龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Sql Server开发 >

sql insert into语句优化方法

时间:2013-01-03 18:08来源:未知 作者:admin 点击:
分享到:
很多时间我们会把insert into每插入一条记录生成一个如insert into table value这样的做法,这样数据量少没事多了会出问题,下面我们讲述一下insert into语句优化方法. 代码如下 insert into tabl
很多时间我们会把insert into每插入一条记录生成一个如insert into table value这样的做法,这样数据量少没事多了会出问题,下面我们讲述一下insert into语句优化方法.
 代码如下

insert into table value('a','b');
...
insert into table value('m','n'); 

 
但是由于每进行一次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
SELECT  *  FROM tablename PARTITION (TB_ORDER_DE_WAREID40) tcc  WHERE  NOT EXISTS (
SELECT /*+ parallel(tcch,7) parallel(tcc,7) */ tcch.id FROM tablename_his tcch WHERE tcc.id=tcch.id
) AND mod(tcc.id,10)=9


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


收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接