insert /*+append*/为什么会提高性能
在上一篇的blog中 做了下使用,在归档和非归档下,做数据插入http://blog.csdn.net/guogang83/article/details/9219479。结论是在非归档模式下表设置为nologging用insert /*+append*/速度最快。那为什么快呢,原理是什么?下面我们来一起做一个实验:
SQL> create or replace view m_undo_redo as
select v$statname.name,value
from v$mystat, v$statname
where v$mystat.statistic# =v$statname.statistic#
and (v$statname.name ='redo size'
or v$statname.name = 'undo change vector size');
视图已创建。
SQL> create table t (x int);
表已创建。
SQL> set timing on
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 22644
undo change vector size 7484
SQL> insert into t select rownum from dual connect by level <=1000000;
已创建1000000行。
已用时间: 00: 00: 01.03
SQL> commit;
提交完成。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15722456
undo change vector size 2380000
SQL> select (2380000-7484) undo,(15722456-22644) redo from dual;
UNDO REDO
---------- ----------
2372516 15699812
SQL> truncate table t;
表被截断。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15781532
undo change vector size 2396672
SQL> insert /*+append*/ into t select rownum from dual connect by level <=1000000;
已创建1000000行。
已用时间: 00: 00: 00.96
SQL> commit;
提交完成。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15871640
undo change vector size 2419196
SQL> select (2419196-2396672) undo,(15871640-15781532) redo from dual;
UNDO REDO
---------- ----------
22524 90108
两次的对比:
| 模式 |
生成undo |
生成redo |
| 普通insert | 2372516 | 15699812 |
| insert /*+append*/ | 22524 | 90108 |
分析结论:两次对比的结果表示用insert /*+append*/后,数据的undo和redo没有生成。因为HWM 在移动的过程中,这些block是不能被其他process使用的,那么意味着,只要记录下该次direct insert所涉及到的空间的redo 和 undo ,在失败回滚的时候,只需要把这些空间修改为原来的状态就可以,而不用逐个记录去delete。
来源:http://blog.csdn.net/stevendbaguo/article/details/9241481
insert /*+append*/为什么会提高性能的更多相关文章
- FMDB官方使用文档-GCD的使用-提高性能(翻译)
FMDB官方使用文档-GCD的使用-提高性能(翻译) 发布于:2013-08-19 10:01阅读数:13395 由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此 ...
- 使用SQL Server 2000索引视图提高性能
什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...
- 转:使用WITH AS提高性能简化嵌套SQL
使用WITH AS提高性能简化嵌套SQL 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片 ...
- 22 mysql有那些”饮鸩止渴”提高性能的方法?
22 mysql有那些”饮鸩止渴”提高性能的方法? 正常的短连接模式是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重新连接.如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然 ...
- 千万级MySQL数据库建立索引,提高性能的秘诀
实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...
- ASP.NET MVC之如何看待内置配置来提高性能优化(四)
前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...
- CSS性能分析,如何优化CSS提高性能
不负十年后的自己,共勉! 前端性能优化一直是一个比较热门的话题,我们总是在尽我们最大的努力去,提高我们的页面性能,比如减少HTTP请求,利用工具对资源进行合并压缩,脚本置底,避免重复请求,css sp ...
- 对于大批量赋值功能,使用if判断是否能提高性能
场景: 如果对某变量进行赋值,是否需要判断一下,如果相等就不用赋值,这样会不会提高性能. 代码如下: "; "; , x2=, x3=; Stopwatch w = new Sto ...
- Java编程提高性能时需注意的地方
1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...
随机推荐
- 3998: [TJOI2015]弦论
题解: 每个点的size值就是这个从根-它出现的次数 如果相同只算一次就全部赋值为1就可以了 代码: #include <bits/stdc++.h> #define ll long lo ...
- A - Exposition CodeForces - 6E
题目链接:https://vjudge.net/contest/202699#problem/A 题意 给一个n个元素的序列,从中挑出最长的子序列,要求子序列中元素差的最大值不超过k.问有几个最长子序 ...
- [转]MySQL忘记密码的正确解决方法
http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...
- python基础——循环(for,while,break,continue)
for while . break:退出循环 continue:退出本次循环 例子 for i range(0,101,2): print(i) --------------------------- ...
- Python执行ImportError:No module named MySQLdb异常
- NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...
- 舞蹈链 DLX
欢迎访问——该文出处-博客园-zhouzhendong 去博客园看该文章--传送门 舞蹈链是一个非常玄学的东西…… 问题模型 精确覆盖问题:在一个01矩阵中,是否可以选出一些行的集合,使得在这些行的集 ...
- 删除Docker中所有已停止的容器
方法一: #显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID, sudo docker ps -a|grep Exited|awk '{print $1}' #查询所有的容器,过滤出E ...
- 02. Pandas 1|数据结构Series、Dataframe
1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index . s.values # Series 数据结构 # Series 是带有标签的一 ...
- 爬虫之xpath用法
导包用: from lxml import etree