2

私は次のような意味です:

update table_name set field_1=if(date_add(data_field,interval 30 hour) >= now(),1,0), field_2=if(date_add(data_field,interval 30 hour) >= now(),1,0) where ...

この場合、date_add(data_field、interval 30 hour)を2回使用する必要がありますが、変数などに格納する方法はありますか?その後、2回呼び出す必要はありません。

ありがとう。

4

2 に答える 2

2

これは不要な最適化です。クエリ オプティマイザは関数呼び出しが決定論的であることを認識し、一度呼び出した結果をキャッシュして、その結果を 2 回目の呼び出しの代わりに再利用します。

于 2012-07-02T02:22:30.617 に答える
1

もちろん:

set @mydate := date_add(data_field,interval 30 hour);

update table_name set
field_1=if(@mydate >= now(),1,0), 
field_2=if(@mydate >= now(),1,0)
where ...

Fyi、これらはユーザー定義変数と呼ばれます

于 2012-07-02T02:11:10.633 に答える