我有一个存储过程,它在临时表中插入大约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
答案 0 :(得分:0)
当您在InnoDB表中插入行时,MySQL会构建primary_key并更新该行的索引。这是针对每一行完成的,可以大大减慢插入速度。通过将它们包装在事务中,您实际上是强制它首先插入所有行,然后一次性重建键和索引。因此,性能提升。