我们在生产环境中经常遇到需要往表中插入大量数据的情况,怎么样才能让插入数据的速度变快呢?Oracle中的append简直就是神器!!没图说个**,直接上图:
是不是看晕了?哈哈,莫慌,请看下面总结:
1. 数据库为归档模式,必须同时有nologging和append才可以;
2. 数据库为非归档模式,只需要append就可以了。
为什么使用了append就能提高速度呢?这是因为append可以使数据库在高水位线之上直接插入数据,相对于普通插入,在做rollback的时候需要更少的操作(加了append后的insert,在做rollback时直接把高水位线降到原来位置),所以就可以产生更少的redo。
PS:提供一下实验可能会用的SQL
1. 查询数据库状态
(1)SELECT name,log_mode FROM v$database;
(2)ARCHIVE LOG LIST;
2. 修改数据库归档状态
步骤1:shutdowm immediate
步骤2:startup mount
步骤3:alter database archivelog; 或者 alter database noarchivelog;
步骤4:alter database open;
3. 查询redo和undo量
select name,value from (select b.name,a.value from v$mystat a,v$statname b where a.STATISTIC#=b.statistic#) where name='redo size' or name like 'undo change%';
The End!