2014-11-06 25 views
0

在新公司(模式可能會更改)中,我有一個表偶爾會從解析的csv文件接收批量插入(10k-200k行可能包含重複項)。對此最好的方法是什麼?C Sharp MysqlBulkInsert vs Muplitple插入查詢

目前,我執行以下操作:Insert Into table (Fields) Values (Values) ON DUPLICATE KEY UPDATE Set <Primary Key> = <Primary Key>當插入記錄的數量增加時,這會花費太長的時間。

兩個選項我知道是

1)INSERT INTO table (Fields) VALUES (Values),(Values),(Values)....

關注的:

  • Paramaterizaion,我將不得不宣告數以千計的命令參數,以避免SQL注入?
  • 重複的鍵,是有辦法來避免該命令時,重複的主鍵在混合

2)使用MySqlBulkLoader

關注加入失敗:

  • 列映射:從我讀過的csv需要用與表中相同的順序生成的字段(假設簡單的DESCRIBE tablename將給我正確的順序)。由於該公司是新的,並且表格結構已經改變。我不想忘記更新代碼並讓我的數據完整性受到影響。

任何幫助是極大的讚賞。

回答

0

一種選擇是使用帶有REPLACE語法的LOAD DATA INFILE。 REPLACE語法將更換輸入行現有的行爲對現有的行中的主鍵或唯一索引相同值的行

例子:

LOAD DATA INFILE '/tmp/your_data.csv' REPLACE 
INTO TABLE your_table (column1, column2, ...) 

正如你所說,你的數據庫架構將頻繁地改變。您可以從配置中讀取列的列表。這樣,當數據庫模式發生某些變化時,您不必更改代碼。

+0

謝謝,我會用REPLACE讀取LOAD DATA INFILE。我不介意更改代碼,我擔心的是如果添加或替換列,bulkload仍然會在不同的列上執行查詢。 – Vee 2014-11-06 04:12:41

+0

正確。正如我所說的,您可以在配置文件中按順序列出列的列表。所以當查詢將執行時,它會採取正確的列數和順序。 – Typist 2014-11-06 04:28:53