2010-05-25 55 views
7

我的數據庫中有5-6個表,我需要用測試數據填充以在我的應用中測試性能。什麼是將60m記錄導入SQL的最快方法

我可以編寫代碼並做一個批量插入我的預測是,它將需要近3天的時間才能運行,所以我認爲必須有一個更快的方法。

任何想法?

+0

甜蜜的耶穌,3天的Sql INSERTS ...你能想象如果你必須通過Web界面通過文件上傳(例如PhpMyAdmin,SQL-Web-Admin)來餵食...祝你好運。 – Dal 2010-05-25 11:30:51

+2

千萬不要使用應用程序語言來完成數據庫的工作,也不要使用數據庫來完成應用程序語言的工作,而這是數據庫的工作。 – 2010-05-25 11:45:44

回答

1

SSIS是一種方法,但是您要麼使用大容量插入任務,要麼循環訪問文件並調用INSERT INTO語句。有BCP可用。

+0

我正在考慮這個。 BCP要快得多嗎? – Jon 2010-05-25 09:14:53

+0

BCP不是比BULK INSERT更快。看到這個鏈接:http://msdn.microsoft.com/en-us/library/aa178096(SQL.80).aspx – 2010-05-25 09:30:26

+0

謝謝,奇怪我一直認爲BCP更快 – Jon 2010-05-25 09:46:44

3

根據您生成數據的方式,SSIS可能是插入數據的最佳方式。

此外,請確保在可能的情況下關閉所有觸發器,然後刪除儘可能多的索引,然後重新添加它們。

0

使用recursive CTEs生成和一次插入行的鉅額:

with table1Test 
as (
-- 
-- generate some test rows 
-- 
) 
insert into table1 select ... from table1Test 
1

BCP是非常非常快的,而且並不難使用,也可以從一個批處理文件,簡單,快速地運行之後。

SSIS,超級,你可以用分支和決策樹建立漂亮的腳本。

對於一次性的情況,兩者的速度都是相似的。

你會對如何處理6000萬的事實感到震驚。使用一個整齊的BCP批處理文件,您可以導入,然後修改,導出新數據,並創建不同的測試數據集。所有將在幾秒或幾分鐘內工作。還請記住,如果您需要爲bcp指定一個格式文件,一種方法是將兩個記錄鍵入表中,然後從該表導出bcp,從而允許bcp生成fmt文件。現在你有了這個文件,你可以使用它導入。

好運,

馬克·布林 愛爾蘭 BMW R80GS 1987

0

你可以看看展鵬的工具,它們有一個稱爲數據發生器。它可以幫助您不必編寫自己的腳本,並且我確信它們對插入速度有某種程度的優化。

(免責聲明,我沒有與Redgate聯繫,就像軟件一樣)。

1

通過事先禁用索引插入大量數據可以節省大量時間,並在完成時重新啓用它們。在添加每一行時,它需要不斷重新平衡索引,有時會分割頁面等。最好是跳過一堆重複的操作,並在插入完成後讓它執行一次工作。

如果你很勇敢並且確信數據是正確的,那麼也可以殺掉任何外鍵關係,並在完成時添加它們。否則,它將執行查找以檢查插入的每一行中每個FK值的有效性。其他限制也一樣。

相關問題