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
会给我正确的顺序)。由于这家公司是新成立的,表格结构已经发生了变化。我不想忘记更新代码,让我的数据完整性受到损害
非常感谢您的帮助。
一个选项是使用带有REPLACE语法的LOAD DATA INFILE。REPLACE语法将用输入行替换现有行,这些行对于现有行中的主键或唯一索引具有相同值
示例:
LOAD DATA INFILE '/tmp/your_data.csv' REPLACE
INTO TABLE your_table (column1, column2, ...)
正如您所说,您的数据库模式将经常更改。您可以从配置中读取列的列表。这样,当数据库模式发生变化时,就不必更改代码。