转from:http://blog.itpub.net/26838108/viewspace-721266/
使用append提示进行insert叫做直接路径加载插入。
【特点】
1、使用这种提示因为系统不去查找freelist链表中的空闲块,直接在高水标记位以上插入数据,因此速度比较快。但若是对于经常delete的表,浪费磁盘空间太大!
2、它不记录日志,因此一旦插入的数据在没有保存回磁盘的时候发生掉电之类的状况插入的数据不能重做。
3、/*+append*/后,需要马上提交,否则会影响下一次修改失败(insert,update,delete)
在Oracle Database 10g Enterprise Edition Release 10.2.0.1.0中,如果插入操作的语法是
insert /*+append*/ into XXX values(XXX);
那么系统加的是row exclusive锁,也就是正常insert所加的行级锁,但是如果插入操作的语法是
insert /*+append*/ into XXX select XXX from XXX;
那么系统加的是exclusive锁,相当于表级锁,加表级锁意味着在本会话没有commit的时候其他任何会话都不能再进行insert,update,delete操作
【相关SQL语句】
检查数据库归档模式(NOARCHIVELOG、ARCHIVELOG):
Archive log list
或者
SELECT log_mode from v$database;
查看当前redo日志大小:
select name,value,class from v$sysstat where name='redo size';
或者打开统计,这个更准确地统计当前语句生成的redo,推荐使用
set autotrace traceonly statistics
普通插入方式:
insert into t select * from dba_objects;
append插入方式:
insert /*+append*/ into t select * from dba_objects;
Append+nologing插入方式:
insert /*+append*/ into t nologging select * from dba_objects;
【测试结论】
1、无论归档模式、还是非归档模式,append+nologing插入方式效果最好,生成最小的redo日志
2、非归档模式下,append插入模式效果不错
3、归档模式下,append插入模式没有效果
【测试例子】
http://wenku.baidu.com/view/2cd6472a4b73f242336c5fa8.html
【我的测试】
从以下对比可以看出,增加hint方法,速度增加4倍。
还真的有这么神,都是180万行的表拷贝,我的测试如下:
insert into p_nbsc_ho1 select * from p_nbsc_ho (消耗时间73分钟)
insert /*+append*/ into p_nbsc_ho2 select * from p_nbsc_ho (消耗时间7分钟)
弊端:
insert /*+append*/ 如果不commit的话,会对该表加6级锁,也就是说,即使此时select 这个表都会报错。
因此append提示的语句首先不能是业务表,其次要尽快提交commit,所以一般情况不敢用hint了。
相关推荐
INSERT /*+ append */ INTO TABLE1 AS SELECT * FROM TABLE2; ``` 此语句表示使用Append模式将 `TABLE2` 中的所有数据插入到 `TABLE1` 中。 #### 三、使用场景及注意事项 - **适用场景:** - **批量数据导入:**...
- 描述了在非归档模式下,通过`insert /*+ append */`方式可以减少Redo生成量;但在归档模式下,这种方式不再有效。 - 分析了在具有nologging属性的表中进行数据插入时,归档模式与非归档模式下的Redo生成量差异。...
此外,对于使用 /*+ APPEND */ 指令的插入操作,这种优化过的插入方式仍然会被DBA_TAB_MODIFICATIONS追踪。这意味着无论何种插入方式,只要操作发生,视图都会记录下来。 当对表进行 `TRUNCATE` 操作时,DBA_TAB_...
在IT行业中,jQuery是一种广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计和Ajax交互等任务。...在开发过程中,应始终关注性能优化和用户体验,确保代码简洁高效,同时满足项目的需求。
insert /*+ append */ into t1 select * from t; commit; ``` #### 总结 通过对Oracle数据库中的大数据量操作采取上述策略和技术,可以显著提高操作性能,降低资源消耗,确保业务系统的稳定运行。值得注意的是...
INSERT /*+ APPEND, PARALLEL */ INTO 目标表名 NOLOGGING SELECT * FROM 表名; ``` ##### 4.2 查看 Force Logging 状态 1. **数据库级别**: ```sql SELECT log_mode, force_logging FROM v$database; ``` ...
【Vue.js 开源库——Vue-append 深度解析】 Vue.js 是一款广泛使用的前端JavaScript框架,它以其...然而,如同所有强大的工具一样,使用Vue-append时也需要注意安全性和性能优化,以确保应用程序的健壮性和用户体验。
### Redis实战《红丸出品》知识点总结 #### 一、Redis快速入门 ##### 1.1 Key-Value存储系统简介 - **Voldemort**: 一个分布式键值存储系统,最初由LinkedIn开发,用于构建高性能、高可用性的数据存储服务。 - **...
例如,针对`P_20150609`分区中特定时间范围的数据,可以创建外部表`charge_ext_20150609`,并添加过滤条件来筛选出需要的数据,然后通过`INSERT /*+APPEND*/`快速插入到目标表,实现高效的数据恢复。 外部表的另一...
总结来说,`golang-benchmark-append`项目提供了一个比较Go语言中`append()`和直接插入切片性能的平台。通过基准测试,我们可以了解在不同场景下哪种方法更合适,并据此优化代码以提高效率。在实际编程中,选择使用`...
它能够显著提升数据处理的性能和效率,尤其适用于需要一次性插入大量数据的场景。 **1.1 批量插入的基本概念** 批量插入是指将多条数据作为一组来执行数据库插入操作,而不是逐条执行插入。这种方式通过减少与...
### Java基础知识精要 #### 1. 快捷键与构造方法 - **Out+Shift+SC**: 用于创建无参数的构造方法...以上总结了Java基础中的重要知识点,涵盖了从基础语法到集合框架的广泛内容,有助于理解和掌握Java编程的基础知识。
### Java面试解析总结 #### 数据库篇 - **事务四大特性(ACID)**:事务在数据库操作中扮演着至关重要的角色,确保数据的一致性和完整性。ACID特性包括: - **原子性(Atomicity)**:表示事务中的所有操作要么...
本文将对Redis中的常用操作命令进行详细总结,分为键(key)操作、字符串类型操作和链表操作三大类。 **一、键(key)操作** 1. **模糊查询key**: Redis 提供了通配符 `*`、`?` 和 `[]` 来进行模糊匹配查询键。例如,`...
- 为了监控批量插入的性能,在代码中加入了时间戳记录,通过`Long startTime = System.currentTimeMillis();`和`Long endTime = System.currentTimeMillis();`记录开始时间和结束时间,然后计算并打印出总的执行时间...
**常用快捷键总结** - Ctrl+S:保存当前文件。 - Ctrl+O:打开文件。 - Ctrl+N:新建文件。 - Ctrl+C/Ctrl+V/Ctrl+X:复制、粘贴、剪切。 - Ctrl+Z:撤销上一步操作。 ##### 11. **使用Windows剪切板** - 通过...
两者之间的不兼容性意味着在向MySQL数据库插入包含日期时间的数据时,必须先将Java的`Date`对象转换为符合MySQL格式的字符串。 #### 转换方法 为了实现从Java的`Date`类型到MySQL的`DateTime`格式的转换,可以编写...
### Redis实战知识点总结 #### 第一章:Redis快速入门 ##### 1.1 Key-Value存储系统简介 **1.1.1 Voldemort** - **特点**:Voldemort是一款分布式键值存储系统,主要设计用于处理高并发场景。 - **应用场景**:...
### Java字符串使用总结 #### 一、String 类 在Java中,`String`类并不是基本数据类型,而是一个对象。这意味着所有的字符串字面值(如 `"abc"`)都是作为`String`类的实例来实现的。`String`类的一个关键特性是**...