1

以下の 2 つのクエリ ケースの間で、どちらが高速か:

update t set v = case when id = 1000000 then 100 when id = 10000000 then 500 else v end

または

update t set v = 100 where id = 1000000;
update t set v = 500 where id = 10000000;

テーブル t には id に一意のインデックスがあり、テーブルはかなり大きくなる可能性があります (数百万のエントリ)。

私の推測では、2 番目のケースでは複数のクエリが作成されますが、最初のケースではテーブルのフル スキャンを実行しているときに、インデックスを使用してエントリを検索できるため、それでも高速です (ただし、これは単なる推測であり、実際にはMySQL が CASE 制御フローをどのように処理するかについての手がかりはありません)。

ご回答ありがとうございます。

4

1 に答える 1

0

あなたが持っている2番目のバージョンはより良くてきれいですが、「id」列のインデックスを利用するために、よりきれいな単一の更新も可能です...

update t
   set v = if( id = 1000000, 100, 500 )
   where id in ( 1000000, 10000000 )
于 2012-02-03T03:11:36.627 に答える