Mysql 准备好的语句的最大长度是多少?

Mysql 准备好的语句的最大长度是多少?,mysql,stored-procedures,Mysql,Stored Procedures,我有一个mySQL存储过程,它执行大量插入。 由于性能不好,我决定不在每个循环中插入,而不是为插入构建一个字符串,并且在过程结束时,我将使用一个准备好的语句对所有值进行一次大的插入 问题是我的声明将比VARCHAR更大。它必须是文本 问题是:我能做到吗?或者准备好的语句必须是VARCHAR? 准备好的语句的最大长度是多少?检查:-单个查询的实际限制 但您的问题看起来更深层,若您需要执行太多的插入,则需要准备单个insert语句,并在循环中将值绑定到它并逐个执行 要加快此过程,您需要将“自动提交”

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

问题是我的声明将比VARCHAR更大。它必须是文本

问题是:我能做到吗?或者准备好的语句必须是VARCHAR? 准备好的语句的最大长度是多少?

检查:-单个查询的实际限制

但您的问题看起来更深层,若您需要执行太多的插入,则需要准备单个insert语句,并在循环中将值绑定到它并逐个执行

要加快此过程,您需要将“自动提交”设置为“关闭”,但接下来会出现以下问题:

InnoDB限制1023个通过修改数据创建撤消记录的并发事务

这两个设置都会限制事务大小,因此基本上您需要在第n行(而不是每1行)中添加commit,第n行更好地确定事务大小


更新:查看@BillKarwin的评论-基本上,我们可以说对事务大小没有限制

使用。这是在mySQL中进行大量插入时性能最好的选项,您也可以修改输入数据。

值得一提的是:VARCHAR的最大长度=65535字节;文本的最大长度=65535字节。批量更新如何?执行多个insert语句(每个语句都是准备好的语句),然后批量应用它们,例如在10次insert之后。我将所有内容都插入其中,最后我只将一个插入到mytable SELECT*FROM mytemp;它极大地提高了性能。性能方面最好的选择是randiel的答案,因为我了解到从文件加载数据是mysql中最优化的批插入选项。另外@BillKarwin你的第一条评论基本上回答了我的问题。这不是限制的意思;这不是对每笔交易的语句数量的限制。这是对回滚段中占用空间的事务(而不是语句)数量的限制。无论如何,在MySQL 5.5及更高版本中,该限制提高了128倍,在MySQL 5.6中,可配置为128x1023。较小的
innodb\u log\u fize\u大小不限制事务的范围。如果日志已满,未提交的更改将刷新到表空间,然后可以覆盖日志文件中的空间。这意味着,如果您执行一个大型事务,然后回滚,它必须从回滚段恢复以前版本的页面,然后刷新它们。因此,一个大型事务的回滚可能非常昂贵,因此您建议定期提交是正确的。@BillKarwin yeap,您是对的,我认为mysql将日志文件处理为“撤消日志”。日志文件是一个重做日志,用于重建在崩溃中丢失的更改。撤消信息位于表空间的回滚段中。