オプティマイザの機能MySQL 5.1.30 UPDATEのテーブルのシーケンス

こんにちは 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`







仲間、気をつけろ!



All Articles