我的數據庫中有5-6個表,我需要用測試數據填充以在我的應用中測試性能。什麼是將60m記錄導入SQL的最快方法
我可以編寫代碼並做一個批量插入我的預測是,它將需要近3天的時間才能運行,所以我認爲必須有一個更快的方法。
任何想法?
我的數據庫中有5-6個表,我需要用測試數據填充以在我的應用中測試性能。什麼是將60m記錄導入SQL的最快方法
我可以編寫代碼並做一個批量插入我的預測是,它將需要近3天的時間才能運行,所以我認爲必須有一個更快的方法。
任何想法?
根據您生成數據的方式,SSIS可能是插入數據的最佳方式。
此外,請確保在可能的情況下關閉所有觸發器,然後刪除儘可能多的索引,然後重新添加它們。
使用recursive CTEs生成和一次插入行的鉅額:
with table1Test
as (
--
-- generate some test rows
--
)
insert into table1 select ... from table1Test
BCP是非常非常快的,而且並不難使用,也可以從一個批處理文件,簡單,快速地運行之後。
SSIS,超級,你可以用分支和決策樹建立漂亮的腳本。
對於一次性的情況,兩者的速度都是相似的。
你會對如何處理6000萬的事實感到震驚。使用一個整齊的BCP批處理文件,您可以導入,然後修改,導出新數據,並創建不同的測試數據集。所有將在幾秒或幾分鐘內工作。還請記住,如果您需要爲bcp指定一個格式文件,一種方法是將兩個記錄鍵入表中,然後從該表導出bcp,從而允許bcp生成fmt文件。現在你有了這個文件,你可以使用它導入。
好運,
馬克·布林 愛爾蘭 BMW R80GS 1987
你可以看看展鵬的工具,它們有一個稱爲數據發生器。它可以幫助您不必編寫自己的腳本,並且我確信它們對插入速度有某種程度的優化。
(免責聲明,我沒有與Redgate聯繫,就像軟件一樣)。
通過事先禁用索引插入大量數據可以節省大量時間,並在完成時重新啓用它們。在添加每一行時,它需要不斷重新平衡索引,有時會分割頁面等。最好是跳過一堆重複的操作,並在插入完成後讓它執行一次工作。
如果你很勇敢並且確信數據是正確的,那麼也可以殺掉任何外鍵關係,並在完成時添加它們。否則,它將執行查找以檢查插入的每一行中每個FK值的有效性。其他限制也一樣。
甜蜜的耶穌,3天的Sql INSERTS ...你能想象如果你必須通過Web界面通過文件上傳(例如PhpMyAdmin,SQL-Web-Admin)來餵食...祝你好運。 – Dal 2010-05-25 11:30:51
千萬不要使用應用程序語言來完成數據庫的工作,也不要使用數據庫來完成應用程序語言的工作,而這是數據庫的工作。 – 2010-05-25 11:45:44