我想将一个巨大的文件加载到informix数据库中的一个表中,这是永远的。 以前,我使用的是这个命令:
LOAD FROM <file> delimiter "|" INSERT INTO <tablename>
经过一番研究,我在IBM网站上阅读了外部表的概念。
简单LOAD
命令和使用EXTERNAL
表将数据加载到数据库之间有什么区别?
这两者之间是否有任何性能差异?
答案 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);