こんにちは MySQL 5.1.30オプティマイザーの楽しい機能の1つについて説明します。これにより、アップグレード前にクエリを慎重に確認できます。
好奇心の強い人のために: 「現在、SET式は、左から右への式の順序ではなく、更新されたテーブルの順序で実行されます。」
私はこのトピックの著者ではなく、
travisbickleであるとすぐに言いたいです。 カルマが低いため投稿できませんでした。
他の警戒管理者と同じように、私はもう一度更新し、さまざまな場所に突っ込み、すべてがうまくいくと決めました。
1か月が経ち、今日は1月の月間レーティングチャートでいくつかのゼロを見ました...
現在の評価を月次および合計に変換する操作については、1日1回起動される単純な要求に応答します
UPDATE
xE_tvchannels_dyn AS t0,
xE_tvchannels_monthrating AS t1
SET
t0.ratingflushed = 1233522000,
t1.rating = t1.rating + t0.rating,
t0.totalrating = t0.totalrating + t0.rating,
t0.rating = 0
WHERE
t0.id = t1.cid AND
t1. month = '200902' AND
t0.rating > 0 AND
t0.ratingflushed <1233522000
* This source code was highlighted with Source Code Highlighter . maxshopen
理由は散文的であることが判明しました-現在、SET式は左から右の式の順序ではなく、更新されたテーブルの順序で実行されるため、このクエリは正直に `t0` .ratingflushed` = 1233522000、` t0`.`rating` = 0、そしてその時だけ、 `t1`.`rating` =` t1`.`rating` + `t0`.`rating`。
硬化、もちろん
UPDATE `xE_tvchannels_monthrating` AS `t1`, `xE_tvchannels_dyn` AS `t0`
仲間、気をつけろ!