Sql-Server-2005
SQL Server 2005 - 在 2 個表中生成和批量插入 300 萬行
我的任務是以程式方式生成 300 萬行不同的數據,並將它們插入數據庫表中以進行測試。
我編寫了一個 VB.NET 程序來處理行數據的生成,然後可以一次將一行數據直接插入到我的數據庫中,也可以將其寫入 .csv 文件中的逗號分隔行。
我的問題是某些行需要在另一個表中添加一個連接行,並且連接是從我的第一個表中完成的 IDENTITY 列值,並且在插入行之前我不知道該值是什麼。
所以我一直在使用 VB.NET 程序一一插入行,如果需要,在另一個表中添加連接行。這以合理的速度工作,直到主表達到大約 200 萬行,此時它開始花費更長的時間來插入新行。
實現我的目標的最佳實踐是什麼?我看過 Bulk Insert 和 OPENROWSET,但無法弄清楚如何使用它們來填充兩個具有不同行數的表和一個我不知道其值的連接列。
你的表結構是這樣的?:
Table1 id (identity) data1 data2 data3 Table 2 id (identity) t1id (fk to table1) data1 data2 ... -- Main Table insert INSERT INTO table1 (data1,data2,data3) VALUES('dummy1','dummy2','dummy3'); --get last inserted id var=SELECT SCOPE_IDENTITY() -- dependent insert into table2 INSERT INTO table2 (t1id,data1,data2,...) VALUES(var,'dummy1','dummy2','...');
看看這個答案。
如果您從 Table1 的新插入行返回 id,您可以使用它將依賴行插入 Table2,而無需為每一行查詢 Table1。
如果新生成的 id 的選擇是您的瓶頸,這應該會有所幫助。如果您正在全面掃描主表的每一行,索引 id 列(如果尚未完成)也可以減少查找所需的時間。