复制tmp表时MySQL'锁定'进程

时间:2011-11-21 21:07:36

标签: php mysql join temp-tables locked

我有一个查询需要很长时间才能运行,但最终会生成一个新表。实际的连接并不是那么慢,但它几乎所有的时间都花在“复制到tmp表”上,在此期间所有其他查询(应该是不相关的表)的状态被“锁定”。我正在优化长查询,但它可以花一段时间,因为它是一个脱机进程,但它不能完全停止所有其他不应该与它相关的查询。有谁知道为什么所有其他不相关的查询都会被“锁定”以及如何防止这种行为?

2 个答案:

答案 0 :(得分:1)

你是对的,“不相关的表”不应该受到影响。他们不应该而且据我所知他们不是。

MySQL有很多关于锁,存储引擎和处理它的方法的信息。

为了限制锁,我建议您编写一个应用程序来读取执行此新表所需的所有数据,并让应用程序将值插入到新表中。这可能需要更长时间,但它会以较小的块进行,并且锁定较少或没有锁定。

祝你好运!

答案 1 :(得分:-1)

你的MySQL版本是什么?

你使用MyISAM吗? MyISAM在大型SELECT命令上存在很大的LOCK问题。

您有专用服务器吗?内存表的最大大小是多少(在my.cnf中查看)?