10

我正在尝试更新Time_Stamp表中的字段simple_pack_data,以匹配表中类似标题的字段中的值temp_data。每个表都有名为Test_Numberand的字段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";

它需要不到一秒钟的时间,我知道加入工作正常。更新真的要那么久吗?如果是这样,有什么方法可以更改超时值以便它可以通过它?

4

2 回答 2

3

这个错误完全是 MySQL 没有做的。最好的解决方案是离开 MySQL,但由于缺乏这种能力,这篇性能博客文章帮助我在过去解决了这个问题。

MySQL 有很多这样的小问题。这就像在 Access 中工作一样,有一半的时间程序会做错事而不会引发错误。

于 2013-10-22T16:51:45.087 回答
3

试试看你的 MySQL 服务器是否有一个正在运行的进程。

要查看这一点,请在 MySQL 客户端上运行命令:

SHOW FULL PROCESSLIST;

查看idstateinfo列并分析问题。找到问题后,使用以下命令终止进程:

KILL <PROCESS ID>;
于 2021-06-02T19:26:59.507 回答