2

我想将一个巨大的文件加载到informix DB 中的一个表中,这需要很长时间。以前,我使用的是这个命令:

LOAD FROM <file> delimiter "|" INSERT INTO <tablename>

经过一番研究,我在 IBM 网站上阅读了外部表的概念。

LOAD简单命令和使用EXTERNAL表将数据加载到数据库有什么区别?

两者之间有性能差异吗?

4

2 回答 2

4

差别很大,性能也是如此。LOAD 通过普通的 SQL 层,可以与简单的 INSERT 进行比较(有一些优化)。它也是一个客户端“工作”,必须与服务器通信和交换消息。

外部表有很大不同。根据您使用的模式(express 是最快的),该过程会创建数据页并完全绕过 SQL 层。自然是有限制的,但对于大容量负载,它可以产生巨大的差异。此外,对于外部表,是引擎本身产生负载。使用之前的“快速”方法(一种称为高性能加载程序 - HPL 的工具)有一个客户端进程,但总体概念是相似的。

于 2013-02-20T14:24:57.387 回答
0

+1 乔纳森的回答。

应该注意的是,将记录使用来自外部表的 LOAD 或 INSERT 的负载,如果要加载的数据量很大,可能会填满事务日志并导致长时间回滚的长事务。在执行加载之前,请考虑修改要加载到 RAW 的表的表类型(这也涉及删除索引 - 这是一件好事)。例如:

drop index foo_idx1;
Alter table foo type (RAW);
insert into foo select * from ext_foo;
Alter table foo type (STANDARD); -- you will probably need to take a backup at this point.
create index foo_idx1 on foo(foo_col);
于 2017-06-14T20:40:08.547 回答