C Sharp MysqlBulkInsert vs Muplitple Insert Query

本文关键字:Insert Query Muplitple vs Sharp MysqlBulkInsert | 更新日期: 2023-09-27 18:29:23

在一家新公司(架构可能会更改),我有一个表,它偶尔会从解析的csv文件中接收大容量插入(10k-200k行,可能包含重复项)。对此,最好的方法是什么?

目前我执行以下操作:Insert Into table (Fields) Values (Values) ON DUPLICATE KEY UPDATE Set <Primary Key> = <Primary Key>,它花费的时间太长,尤其是当要插入的记录数量增加时。

我知道的两个选项是

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

关注点:

  • 参数化,我是否必须声明数千个命令参数以避免sql注入
  • 重复的主键,当在混合中添加重复的主键时,有没有办法避免命令失败

2) 使用MySqlBulkLoader

关注点:

  • 列映射:根据我所读到的内容,csv需要以与表中相同的顺序生成字段(假设一个简单的DESCRIBE tablename会给我正确的顺序)。由于这家公司是新成立的,表格结构已经发生了变化。我不想忘记更新代码,让我的数据完整性受到损害

非常感谢您的帮助。

C Sharp MysqlBulkInsert vs Muplitple Insert Query

一个选项是使用带有REPLACE语法的LOAD DATA INFILE。REPLACE语法将用输入行替换现有行,这些行对于现有行中的主键或唯一索引具有相同值

示例:

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

正如您所说,您的数据库模式将经常更改。您可以从配置中读取列的列表。这样,当数据库模式发生变化时,就不必更改代码。