informix中的外部表

时间:2013-02-20 07:16:23

标签: informix

我想将一个巨大的文件加载到informix数据库中的一个表中,这是永远的。 以前,我使用的是这个命令:

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

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

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

这两者之间是否有任何性能差异?

2 个答案:

答案 0 :(得分:4)

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

外部表格有很大不同。根据您使用的模式(表示最快),该过程将创建数据页并完全绕过SQL层。 当然有一些限制,但对于批量负载,它可以产生巨大的差异。 此外,对于外部表,它是引擎负载的引擎本身。使用之前的“快速”方法(一种名为High Performance Loader - HPL的工具),有一个客户端流程,但整体概念类似。

答案 1 :(得分:0)

+1为Jonathans回答。

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

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);