oracle insert优化「建议收藏」

oracle insert优化「建议收藏」author:skatetime:2010/10/19insert优化要想提高insert的速度,首先要知道什么影响insert慢,在执行insert的过程中产生redo和undo,要想提高insert的速度,在充分利用系统资源的条件下就要尽量减少insert

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

author:skate
time:2010/10/19


insert优化

要想提高insert的速度,首先要知道什么影响insert慢,在执行insert的过程中产生redo和undo,要想提高insert的速度,在充分利用系统资源的条件下就要尽量减少insert产生的redo和undo,undo的大小没办法改变,但是我们可以改变redo的量。下面是提高insert方法。

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批处理                                                              —化整为零,把大事务变成零散的小事务

说明: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

—–end—–

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160947.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstrom 2021激活码(破解版激活)

    phpstrom 2021激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    87
  • pycharm导出html_python怎么保存代码

    pycharm导出html_python怎么保存代码pycharm一般安装完毕,就是默认是自动保存的,但是……但是….既然是程序,既然是软件,就难免出现bug。也许会有码友出现头天晚上写好的代码,打开一看,第二天白花花一片!!!最简单的,就是每次编写完毕,习惯按ctrl+s手动保存。但是,提醒你务必检查一下你的设置里面,是不是码友弄好自动保存!步骤如下:菜单File->Settings…->Appeara…

    2022年8月28日
    2
  • 一款小清新版的java代码生成器,springboot脚手架「建议收藏」

    一款小清新版的java代码生成器,springboot脚手架「建议收藏」在我们进行软件开发的时候,很多都只是单纯的增删查改,没有太大的技术含量但是却非常占据我们开发的时间,而且如果稍微一不注意,细节的bug就可能耽误一上午的时间,得不偿失,届于此,自己动手开发了一版代码生成器,java在代码自动化方面做得确实不够好,瞧瞧人家.net,算了,不说了,进入正题吧!首先让我们看一下这款生成器的界面整体…

    2022年5月13日
    43
  • Android Service 服务(一)—— Service

    Android Service 服务(一)—— Service

    2021年12月6日
    46
  • Oracle数据库常用Sql语句大全

    Oracle数据库常用Sql语句大全最简单的就是查询:select语句数据库操作语言DML:update、insert、delete等数据库定义语言DDL:create、drop、alter等等oracle取前几条数据语句sqlserver中可以用topn的方法,oracle中用rownum,但如果只用rownum会随机取数据,如果想按一定顺序取前几条数据则可这样写:select*from(select列from表where条件orderby列desc)whererownum<>sel

    2022年5月12日
    42
  • dpkg命令

    dpkg命令dpkg命令如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境。那该怎么安装?答案是:使用dpkg命令。dpkg命令常用格式如下:sudodpkg-Iiptux.deb#查看iptux.deb软件包的详细信息,包括软件名称、版本以及大小等(其中-I等价于–info)sudodpkg-ciptux.deb#查看iptux.

    2022年5月22日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号