如何快速往表里插入大量的数据行
2015-03-06 15:39
489 查看
数据转储过程中往往涉及到数据的插入和删除。在数据量特别大的时候往往会消耗较长时间。
不卖关子,直接介绍一个我目前知道最有效的插入例子。
declare
type fid is table of dpcrm.t_cust_returnvisit.fid%type;
fids fid;
begin
select fid bulk collect into fids from dpcrm.t_cust_returnvisit where rownum < 10000000;
dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
forall i in fids.first..fids.last
insert/*+append_values*/ into sheng2(fid) values(fids(i));
dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end;
这个存储过程向表sheng2插入10000000条记录。
这个例子在如下几点有优化。
1.使用forall批处理,forall的高效不仅仅是插入,在update的时候也可以提高效率
2.使用/*+append_values*/ hint进行直接插入。还有一个提示是append。区别在于append后面要有select,append_values后面可以是values语法。这两种提示之所以会加快insert是因为:正常的insert操作会通过缓冲区缓存,并且为所有数据和元数据的变更创建撤销,为所有变更创建重做。而且会在已有块中寻找空间插入数据。这些都是需要付出极大代价的。
而使用hint之后,插入时将只为元数据的变更创建撤销和重做以便保护数据字典。插入数据将直接在高水位线上插入,不会利用已有块的空间。但是会维护索引。
不卖关子,直接介绍一个我目前知道最有效的插入例子。
declare
type fid is table of dpcrm.t_cust_returnvisit.fid%type;
fids fid;
begin
select fid bulk collect into fids from dpcrm.t_cust_returnvisit where rownum < 10000000;
dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
forall i in fids.first..fids.last
insert/*+append_values*/ into sheng2(fid) values(fids(i));
dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end;
这个存储过程向表sheng2插入10000000条记录。
这个例子在如下几点有优化。
1.使用forall批处理,forall的高效不仅仅是插入,在update的时候也可以提高效率
2.使用/*+append_values*/ hint进行直接插入。还有一个提示是append。区别在于append后面要有select,append_values后面可以是values语法。这两种提示之所以会加快insert是因为:正常的insert操作会通过缓冲区缓存,并且为所有数据和元数据的变更创建撤销,为所有变更创建重做。而且会在已有块中寻找空间插入数据。这些都是需要付出极大代价的。
而使用hint之后,插入时将只为元数据的变更创建撤销和重做以便保护数据字典。插入数据将直接在高水位线上插入,不会利用已有块的空间。但是会维护索引。
相关文章推荐
- 如何快速插入大量的数据(Sqlserver)
- 如何在sqlserver数据库中快速插入大量数据.
- PostgreSQL数据库如何快速插入大量数据
- Oracle如何快速、大量的插入数据
- MySQL 快速地从文件中插入大量数据记录的方法
- C#如何快速高效地导出10万以上的大量数据?
- Oracle中如何用一条SQL快速生成1大量测试数据
- mysql快速插入大量数据
- mysql 如何用一条SQL将一张表里的数据插入到另一张表 3个例子
- 快速向表中插入大量数据Oracle中append与Nologging
- 如何快速保存ListView内存中大量数据到Excel
- 快速插入大量数据的asp.net代码(Sqlserver)
- C#如何快速高效地导出10万以上的大量数据?
- 09-如何快速的向表中插入数据
- Sql Server数据库之通过SqlBulkCopy快速插入大量数据
- 如何快速创建一个含有大量数据的表?
- 如何快速生成Insert数据插入语句?
- C#如何快速高效地导出10万以上的大量数据
- C#如何快速往Excel中插入数据
- C#.NET中如何批量插入大量数据到数据库中