准备好的声明的最大长度是多少?

时间:2013-10-21 22:39:15

标签: mysql stored-procedures

我有一个执行大量插入的mySQL存储过程。 由于性能不好,我决定不在每个循环中插入而不是为INSERT构建一个字符串,在程序结束时,我会用一个准备好的语句为所有值做一个大的INSERT。

问题是我的陈述会比VARCHAR更大。它必须是TEXT。

问题是:我可以这样做吗?或者准备好的声明是否必须是VARCHAR? 准备好的陈述的最大长度是多少?

2 个答案:

答案 0 :(得分:1)

使用 LOAD DATA 。在mySQL中进行大量插入时,它是具有最佳性能的选项,您也可以修改输入数据。

答案 1 :(得分:0)

检查:http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html - 单个查询的实际限制

但你的问题看起来更深,如果你需要执行太多的插入,你需要准备单个insert语句,并在循环中绑定值并逐个执行

要加快此过程,您需要将自动提交设置为关闭,但之后您将遇到下一个问题:http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

  

InnoDB有1023个并发事务的限制,它们通过修改数据创建了撤消记录。

innodb_log_file_size

这两个设置都会限制你的事务大小,所以基本上你需要添加提交每个第N行(而不是每一行),Nth更好地确定程序化

更新:检查来自@BillKarwin的评论 - 基本上我们可以说交易规模没有限制