2009-11-09 28 views

回答

6

BULK INSERT與SQL Server的數據庫引擎在進程中運行,因此避免了通過客戶端API的網絡層傳遞數據 - 這使得它比BCP和DTS/SSIS更快。

此外,使用BULK INSERT,您可以指定數據的ORDER BY,如果這與表的PK相同,則鎖定發生在PAGE級別。寫入事務日誌發生在頁面級別而不是行級別。

在常規INSERT的情況下,鎖定和事務日誌寫入處於行級別。這使得BULK INSERT比INSERT語句更快。

1

至少它可以避免爲要插入的每條記錄創建和提交事務的開銷。還有其他的節省:例如,在整個網絡中傳送更大的數據塊,而不是一次一個記錄將有所幫助。

然後,也許更有趣的是,DB實現者可以(我不知道是否有任何特定的供應商實際做到這一點)開始變得聰明 - 他們可以查看要插入的記錄集,而不是重新組織數據頁容納單個記錄可以對頁面進行批量重組以允許新的插入,同樣我們可以想象,如果我們知道我們插入一組記錄,則可以更有效地完成混洗索引。

0

它在內部轉換爲OLEDB記錄集,然後加載表。

我還沒有給它太多想法,但我認爲這是在SQL Server框而不是客戶端上運行時更快。另外,您可以管理您無法使用正常INSERT的約束條件

From BOL