sql UPDATE, вычисление используется несколько раз, может ли оно быть рассчитано только один раз? - PullRequest
0 голосов
/ 14 июня 2010

Использование:

UPDATE `play`
   SET `counter1` = `counter1` + LEAST(`maxchange`, FLOOR(`x` / `y`) ), 
       `counter2` = `counter2` - LEAST(`maxchange`, FLOOR(`x` / `y`) ), 
       `x` = MOD(`x`, `y`) 
 WHERE `x` > `y` 
   AND `maxchange` > 0

Как видите, LEAST(maxchange, FLOOR(x / y) ) используется несколько раз, но оно всегда должно иметь одинаковое значение.Есть ли способ оптимизировать это, чтобы рассчитать только один раз?

Я пишу это в PHP, для записи.

1 Ответ

4 голосов
/ 14 июня 2010

Оптимизатор запросов ядра СУБД должен это оптимизировать.

Если вы хотите быть уверенным, проверьте объясните план .Я не думаю, что MySQL поддерживает объяснение обновлений, но использует тот же оптимизатор запросов, что и SELECT, поэтому вам, возможно, придется преобразовать его в select.

...