我正在尝试更新表中的Time_Stamp
字段,simple_pack_data
,以匹配temp_data
表中标题相似的字段中的值。每个表都有名为 Test_Number
和 Time_Marker
的字段,我用它来INNER JOIN
表。 Time_Marker
就像一个读数计数,其中Time_Stamp
是从测试开始的实际时间。
我想一次更新一个测试Time_Stamp
,所以我一直在尝试的代码是:
UPDATE simple_pack_data s
INNER JOIN (
SELECT *
FROM temp_data t
WHERE t.Test = "3"
) AS tmp
ON s.Test_Number = tmp.Test_Number AND s.Time_Marker = tmp.Time_Marker
SET s.Time_Stamp = tmp.Time_Stamp
WHERE s.Test_Number = "3";
当我运行它时,它需要 50 多秒,并且出现 1205 错误。如果我运行结构类似的选择语句:
SELECT *
FROM simple_pack_data s
INNER JOIN (
SELECT *
FROM temp_data t
WHERE t.Test = "3"
) AS tmp
ON s.Test_Number = tmp.Test AND s.Time_Marker = tmp.Time_Marker
WHERE s.Test_Number = "3";
它花费不到一秒钟的时间,我知道加入工作正常。更新真的需要那么长时间吗?如果是这样,有没有办法更改超时值以便它可以通过它?
尝试查看您的MySQL服务器是否有正在运行的进程。
要查看这一点,请在 MySQL 客户端上运行以下命令:
SHOW FULL PROCESSLIST;
查看 id、状态和信息列并分析问题。找到问题后,使用以下命令终止进程:
KILL <PROCESS ID>;
这个错误完全是MySQL没有发挥应有的作用。最好的解决方案是摆脱MySQL,但缺乏这种能力,这篇性能博客文章过去帮助我解决了这个问题。
MySQL有很多这样的小陷阱。这就像在 Access 中工作一样,有一半的时间程序会做错误的事情并且不会引发错误。