2010-06-14 67 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。