テーブルTime_Stamp
のsimple_pack_data
フィールドを更新して、temp_data
テーブルの同様のタイトルのフィールドの値と一致させようとしています。各テーブルには、Test_Number
およびTime_Marker
というフィールドがあり、これらをINNER JOIN
テーブルに使用しています。 Time_Marker
は読み取りカウントのようなもので、Time_Stamp
はテストの開始からの実際の時間です。
Time_Stamp
を一度に1つのテストで更新したいので、試したコードは次のとおりです。
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";
1秒もかからず、joinが正常に機能していることはわかっています。更新には本当に時間がかかりますか?もしそうなら、タイムアウト値を変更してそれを乗り越えることができるようにする方法はありますか?
このエラーは完全にMySQLが正常に動作していないことです。最善の解決策はMySQLを終了することですが、その機能が不足しているため、この パフォーマンスブログ投稿 は過去にこれを回避するのに役立ちました。
MySQLにはこれらの小さな落とし穴がたくさんあります。これはAccessで作業するようなもので、半分の時間、プログラムは間違ったことを実行し、エラーを発生させません。