2013-02-20 59 views
2

我想將一個巨大的文件加載到informix數據庫中的一個表中,並且這個文件是永久存在的。 以前,我就是用這個命令:informix中的外部表

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

經過一番研究,我讀外部表在IBM網站上的概念。

簡單的LOAD命令和使用EXTERNAL表將數據加載到數據庫有什麼區別?

兩者之間是否有任何性能差異?

回答

4

區別是巨大的,以及表現。 LOAD通過正常的SQL層,可以與簡單的INSERT(有幾個優化)進行比較。這也是客戶端「工作」,必須與服務器進行通信和交換消息。

外部表格有很大的不同。根據您使用的模式(express是最快的),該進程會創建數據頁並完全繞過SQL層。 當然有限制,但對於批量裝載它可以產生巨大的差異。 另外,有了外部表格,引擎本身就是負載。採用先前的「快速」方法(一種稱爲高性能加載程序 - HPL的工具),存在客戶端過程,但總體概念相似。

0

+1對於Jonathans的回答。

需要注意的是,使用外部表中的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);