我正在尝试更新表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语句:
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";
这需要不到一秒的时间,我知道加入工作正常。更新确实需要这么长时间吗?如果是这样,有没有办法改变超时值,以便它可以通过它?
答案 0 :(得分:4)
这个错误完全是MySQL没有做到的。最好的解决方案是脱离MySQL,但缺乏这种能力,这performance blog post帮助我解决了这个问题。
MySQL有很多这些小问题。这就像在Access中工作一样,程序执行错误的一半时间并没有引发错误。
答案 1 :(得分:0)
尝试查看您的 MySQL 服务器是否有正在运行的进程。
要查看,请在 MySQL 客户端上运行命令:
SHOW FULL PROCESSLIST;
查看id、state 和info 列并分析问题。找到问题后,使用以下命令终止进程:
KILL <PROCESS ID>;