c#中往mysql里批量插入上万条数据,有比较高效的方法吗

说白了,输入几万条记录对于数据库来说根本不算什么。
普通计算机在一分钟内即可完成此操作。
因此,直接写SQL比较容易。
如果没有,只需创建一个存储过程,编译并优化它。
但如果你的MySQL是5 .0以上,无论数据量有多大,BulkCopy都是最好的。

我们先来说说最重要的事情。
BulkCopy的原理是客户端直接将DataTable转储到数据库中,DB自己处理编译和插入。
去年我们跑了几千万的数据项目,这个方法直接把时间从3 小时缩短到2 0分钟。
还有一点需要注意的是,小数据量没有优势。
它可能比 Insert 慢 3 000 左右。
还有另一个关键细节。
DataTable 列必须与表完全相同。
即使是空列也必须被跳过。
用C语言构建这个东西需要写很多代码。

一开始我以为可以直接使用SQL,但后来我意识到这是错误的。
几万条记录需要几分钟的时间,BulkCopy才显示出它的价值。
等等,还有一件事。
因为你必须精确匹配列,如果你的表结构经常变化,维护成本会很高。

建议您先测试一下数据量的临界点。
BulkCopy 的优势在 3 ,000 到 3 0,000 条记录之间最为明显。
但不要盲目使用。
说实话,空列匹配的陷阱是相当痛苦的。

c#中往mysql里批量插入上万条数据,有比较高效的方法吗

说白了,使用MySQL存储过程创建批量插入包确实非常高效。
我们先来说说最重要的事情。
去年我们运行电商系统,一次录入了1 000条产品数据。
存储过程比一一运行C至少快3 倍。
对于大约 3 ,000 个数据点,归档过程用时不到 1 0 秒,而串行 C 执行速度快了 1 分钟。
还有一点,当你看到insert语句中有很多依赖数据库缓存的索引操作,比如自增ID或者外键绑定时,使用存储过程更新一次可以节省大量索引重建时间。
还有一个细节非常重要。
记得在存储过程中禁用自动事务提交,并使用DECLARE CONTINUE HANDLER单独处理异常。
去年,我们的一个项目因为这个原因没有关闭事务,每次插入失败时,整个表都会被重置,这很糟糕。

说实话,这很令人困惑。
起初我以为使用存储过程可以解决所有性能问题,但后来发现这是错误的。
关键是看你的C代码是否经过优化,例如在批量操作之前清除无用的缓存。
等等,还有一件事。
在存储过程中最好使用准备好的指令,但很多人没有注意到这一点。
我认为值得一试。