DB2數據庫中INSERT的效率如何提高,是很多人都在思考的問題,本文將為您介紹DB2數據庫中INSERT 處理過程,及對應優化方法,供您參考,希望對您有所啟迪。
語句准備
動態
自動例如在 CLP 中,或者在一次 CLI SQLExecDirect 調用中)
顯式例如,通過一條 SQL Prepare、CLI SQLPrepare 或 JDBC prepareStatement 語句)
靜態 一次編譯
發送列值到服務器
在 VALUES 子句中包含多行的內容,示例程序 sqllib/samples/cli/tbload.c
在 JDBC 中使用批處理操作
使用 load 將數據快速地裝入到一個 staging 表中,然後使用 INSERT ... SELECT 填充主表。
將多條語句組合成一條語句可以通過 Compound SQL 來實現 ??
讓客戶機與要存取的數據庫使用相同的代碼頁
減少自動執行數據類型轉換
將應用程序中與插入相關的設置開銷最小化 ??
找到存儲行的地方分配和選擇頁)
DB2 使用三種算法中的一種來確定將行插入到哪裡。如果使用了多維群集Multi-dimensional Clustering,MDC)
缺省模式是,DB2 搜索散布在表的各頁上的自由空間控制記錄Free Space Control Records,FSCR),以找到有足夠自由空間存放新行的頁。DB2 提供了 DB2MAXFSCRSEARCH 注冊表變量,以便允許將搜索范圍限制為少於缺省的 5 頁
當表是通過 ALTER TABLE 以 APPEND 模式放置時,就要使用第二種算法。這樣就完全避免了 FSCR 搜索,因為只需簡單地將行直接放到表的末尾。
當表有群集索引clustering index)時,就要用到最後一種算法。在這種情況下,DB2 試圖將每一行插入到有相似鍵值的一頁中。如果那一頁沒有空間了,DB2 就會嘗試附近的頁,如果附近的頁也沒有空間,DB2 就進行 FSCR 搜索。
如果只考慮插入時間的優化,那麼使用 APPEND 模式對於批量插入是最快的一種方法,但是這種方法的效果遠不如我們這裡討論的很多其他方法那麼成效顯著。第二好的方法應該是采用缺省算法,但是,如果在最 佳環境中,更改 DB2MAXFSCRSEARCH 的值影響很小,而在一個 I/O 約束較少的環境中,這種更改所造成的影響就比較可觀了。