Использование:
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, для записи.
Оптимизатор запросов к базе данных должен оптимизировать это.
Если вы хотите быть уверенным, посмотрите пояснить план. Я не думаю, что MySQL поддерживает объяснение обновлений, но использует тот же оптимизатор запросов, что и SELECT, поэтому вам придется перевести его на выбор.