我有一个执行大量插入的 mySQL 存储过程。由于性能很差,我决定不在每个循环中插入,而是为 INSERT 构建一个字符串,并且在过程结束时,我将使用准备好的语句对所有值执行一次大 INSERT。
问题是我的语句将比 VARCHAR 大。它必须是文本。
问题是:我可以这样做吗?还是准备好的语句必须是 VARCHAR?准备好的语句的最大长度是多少?
我有一个执行大量插入的 mySQL 存储过程。由于性能很差,我决定不在每个循环中插入,而是为 INSERT 构建一个字符串,并且在过程结束时,我将使用准备好的语句对所有值执行一次大 INSERT。
问题是我的语句将比 VARCHAR 大。它必须是文本。
问题是:我可以这样做吗?还是准备好的语句必须是 VARCHAR?准备好的语句的最大长度是多少?
使用加载数据。它是在 mySQL 中进行大量插入时性能最佳的选项,您也可以修改输入数据。
检查:http ://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html - 单个查询的实际限制
但是您的问题看起来更深,如果您需要执行太多插入,则需要准备单个插入语句,并在循环中将值绑定到它并一一执行
要加快此过程,您需要将自动提交设置为关闭,但接下来您将遇到下一个问题:http ://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html
InnoDB 通过修改数据创建了 undo 记录的并发事务限制为 1023 个。
这两个设置都会限制您的事务大小,因此基本上您需要每第 N 行(而不是每 1 行)添加提交,第 N 更好地确定程序化
更新:查看@BillKarwin 的评论——基本上我们可以说交易大小没有限制