(非归档模式下)创建表T01:
SQL> create table t01 as select * from dba_objects where 1=2;
Table created.
(非归档模式下)查看当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

49784
(非归档模式下)普通INSERT语句插入:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
(非归档模式下)查看普通INSERT语句执行后,当前redo大小:
SQL> select value
from v mystat,v mystat,vstatname
2 3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;

VALUE

1305724
(非归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
(非归档模式)查询带/+ append/的INSERT执行后,当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;

VALUE

1308140
(非归档模式)计算使用HINT(/+ append/)和普通INSERT语句分别产生的redo大小:
SQL> select (1308140-1305724) redo_append,(1305724-49784) redo from dual;
REDO_APPEND REDO


2416 1255940

可见,在非归档模式下,INSERT语句采用HINT /+ APPEND/的方式确实比普通INSERT语句产生的redo要少很多。

下面测试归档模式下
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch
Oldest online log sequence 109
Next log sequence to archive 111
Current log sequence 111
(归档模式)查看当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

19540
(归档模式)执行普通INSERT语句:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
(归档模式)普通INSERT方式产生的redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

1218884
(归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
(归档模式)查询带/+ append/的INSERT执行后,当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;

VALUE

2451664
(归档模式)计算使用HINT(/+ append/)和普通INSERT语句分别产生的redo大小:
SQL> select (2451664-1218884) redo_append,(1218884-19540) from dual;
REDO_APPEND (1218884-19540)


1232780 1199344

可见,在归档模式下,采用HINT与普通INSERT方式产生的redo量是相当的,且略大于普通INSERT语句产生的redo量。

再看一种情况,归档模式,T01也是LOGGING模式
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

2541780
SQL> insert /+ append nologging / into t01 select * from dba_objects;
或者执行:
SQL> insert /+ append / into t01 nologging select * from dba_objects;

也将产生redo的量为:1233040。

最后一种情况:
(归档模式)修改T01的属性为NOLOGGING:
SQL> alter table t01 nologging;
Table altered.
SQL> select table_name,logging from dba_tables where table_name=’T01’;
TABLE_NAME LOG


T01 NO
(归档模式)查看当前redo值:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

5010600
(归档模式)执行普通INSERT语句:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

6209848
(归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /

VALUE

6210536
(归档模式)计算两者产生的redo差值:
SQL> select (6210536-6209848) redo_append,(6209848-5010600) redo from dual;
REDO_APPEND REDO


688 1199248
可见,在归档模式下,将表调整为NOLOGGING,产生的redo量是最少的!
对比一下:
非归档,T01(LOGGING),普通INSERT语句产生的redo值:1255940
非归档,T01(LOGGING),HINT /+append/,产生的redo值:2416
归档,T01(LOGGING),普通INSERT语句产生的redo值:1199344
归档,T01(LOGGING), HINT /+ append/,产生的redo值:1232780
归档,T01(LOGGING),/+append/ + nologging,产生的redo值:1233040
归档,T01(NOLOGGING),普通INSERT语句产生的redo值:688
归档,T01(NOLOGGING),HINT /+append/,产生的redo值:1199248
综合以上的数据,可以明白,如果想INSERT语句执行的更快,产生更少的redo,分两种情况:
非归档模式:在INSERT语句中使用HINT /+ append /
归档模式:将目标表修改为NOLOGGING(alter table xxx nologging),然后在INSERT语句中使用HINT /+ append /.
[@more@]

关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用相关推荐

  1. lol服务器显示40ms,一个简单insert 语句执行 40ms 原因剖析

    背景:一个简单的带有主键的insert 语句,居然要 40ms ,开发受不了,要求降低 因此我们要关注的的 数据从插入落地的IO 中间都干了什么 一.MySQL的文件 首先简单介绍一下MySQL的数据 ...

  2. 2022-06-01 postgres的insert语句执行的关键流程

    摘要: postgres的语句执行可以分为客户端连接层, 查询分析层, 执行计划层,存储层. 本文记录insert语句在源码中如何执行的. 流程概述: 执行流程: 这里我们将介绍为了获取结果,一个查询 ...

  3. 使用PyPy加快Python程序执行速度

    Python可以说是近年来比较火的编程语言之一了,Python的优点就不多说了,写过Python的同学应该都有所体验,Python独有的一些特性,写起来真实太舒服了,但是老实讲,Python也没有像各 ...

  4. MySQL · 源码分析 · 一条insert语句的执行过程

    本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析 create table t1(id int); insert into t1 values(1) ...

  5. mysql insert执行过程_MySQL · 源码分析 · 一条insert语句的执行过程

    本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析 create table t1(id int); insert into t1 values(1) ...

  6. SQL查询语句执行顺序详解

    查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE.UPDATE)的基础.当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作.因此基于SELE ...

  7. MyBatis—insert语句返回主键和selectKey标签

    本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...

  8. 将insert语句转化为select语句,进行校验,验证是否插入成功

    前言   公司的测试和运维不太懂sql,每次将sql文件交给他们到测试或者生产数据库中执行sql的时候,他们都是全部执行,不看是否执行成功.因此,就会导致有些insert语句没有执行成功,等到功能验证 ...

  9. Oracle insert语句慢的背后

    为什么80%的码农都做不了架构师?>>>    问题:用户反映一个insert语句执行很慢. 1.检查表索引并不多,相比表,索引确实有点大,但应该不是问题所在. SQL> se ...

最新文章

  1. CentOS 7下安装UCSF Chimera
  2. Cookie和Session-学习笔记04【Session之验证码案例】
  3. kaggle奖牌发放体系(转)
  4. pythoni手机版下载_Python进度栏和下载
  5. mybatis association 问题
  6. 关于有默认值的字段在用EF做插入操作时的思考(续)
  7. 微信小程序最基本代码入门
  8. SAP UI5 SmartForm 智能表单控件的使用方法介绍试读版
  9. Html5固定链接生成二维码的技巧
  10. Java基础编程实现2-面向对象-类
  11. [功不唐捐-2013]_强哥的无敌异或
  12. 网络Sniffing原理
  13. 夜光 :AGV 导航策略总体方案设计
  14. linux+zip+加密+无交互,Linux下zip加密压缩
  15. ae制h5文字动画_对于8个华丽的HTML5文字动画特效图文赏析
  16. 从身份证号提取出生日期
  17. jedispool 为redis保驾护航
  18. 字符串删除开头部分数字
  19. 2022-05-14:语法补全功能,比如“as soon as possible“, 当我们识别到“as soon as“时, 基本即可判定用户需要键入“possible“。 设计一个统计词频的模型,
  20. Ma键盘与Windows快捷键对应

热门文章

  1. 斯坦福的“计算广告学”
  2. 腾讯地图html代码,腾讯地图API使用参考.html
  3. RAID卡原理与设置
  4. transformers的beam_search
  5. Spring之AOP系列--将方法上的注解做为切点(用@Around)
  6. python分段函数输入x的值求y的值_C语言编程题 有一分段函数如下,要求用scanf函数输入整数x的值,求y值并在屏幕上输出。有分段函数如下,编程实现输入整...
  7. DATA GUARD代码(部分)
  8. ffmpeg 提取音频,音频转换,添加字幕
  9. Linux学习之——/etc/sysconfig目录
  10. matlab中facedetector,Matlab人脸检测方法(Face Parts Detection)详解