繁体   English   中英

Mysql 5.5 Innodb慢插入查询问题

[英]Mysql 5.5 Innodb slow insert query issue

我有一个存储过程,在临时表中插入大约3K行。 这个SP在Mysql 5.1(Windows桌面)上花了3秒钟,同样的SP在Mysql 5.5上大约需要2分钟。

我尝试了很多东西,比如通过改变innodb_buffer_pool_size等优化innodb,但没有任何效果,然后我在stackoverflow上读了一些东西解决了我的问题。

START TRANSACTION; 
CALL sp();
COMMIT;

上面的代码解决了这个问题,现在我回到了3秒的执行时间。 有人可以告诉我这里到底发生了什么。 为什么我必须在5.5中添加启动事务才能快速执行? 为什么我在5.1中不需要这个

我猜这是由于自动提交被运行禁用

START TRANSACTION; 

您可以通过手动禁用自动提交验证它,然后运行您的proc。

SET autocommit=0;

我在mysql.ini文件中添加了以下行

innodb_flush_log_at_trx_commit=0

它似乎解决了这个问题,程序现在运行得很快。 理想情况下,对于ACID合规性,innodb_flush_log_at_trx_commit应为1。

当您在InnoDB表中插入行时,MySQL会构建primary_key并更新该行的索引。 这是针对每一行完成的,可以大大减慢插入速度。 通过将它们包装在事务中,您实际上是强制它首先插入所有行,然后一次性重建键和索引。 因此性能提升。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM