使用:
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编写此代码,以备记录。
答案 0 :(得分:4)
数据库引擎查询优化器应该优化它。
如果您想确定查看explain plan。我不认为MySQL支持解释更新,但它使用与SELECT相同的查询优化器,因此您可能必须将其转换为选择。