2010-06-14 60 views
0

使用:sql更新,计算多次使用,是否可以只计算一次?

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中编写了这个代码,用于记录。

回答

4

数据库引擎查询优化器应该优化这一点。如果你想确保检查explain plan。我不认为MySQL支持解释更新,但它使用与SELECT相同的查询优化器,因此您可能需要将它翻译为select。