插入一列資料經歷以下步驟,每步皆有優化空間:
額外處理(索引、觸發器等)亦影響效能,後文將討論。
declare staffcursor cursor for select * from staff;
load from staffcursor of cursor insert into myschema.new_staff;
等同於 insert into myschema.new_staff select * from staff,但效能提升近 20%。
僅限 CLI 應用,速度極快。附帶範例顯示:LOAD 速度是完全優化陣列插入的 2 倍,較未優化陣列插入快近 10 倍。
重複執行相同 INSERT 時,存取計劃進入套件快取可免除編譯開銷。但若每列 VALUES 值不同,每句皆視為唯一需獨立編譯。解決方案:使用參數標記:
-- 避免這樣:
insert into mytable values (1, 'abc');
insert into mytable values (2, 'def');
-- 改用參數標記,一次準備,重複執行:
insert into mytable values (?, ?);
靜態 SQL 使用主機變數同樣受益。可使一系列 INSERT 速度提升數倍。
關鍵技巧:單一 INSERT 陳述式包含多列,減少客戶端-伺服器往返與 DB2 開銷。多列插入技巧將於下篇詳細說明。