2015-02-09 14 views
-1

我想更新一個值,如果它尚未設置。如何更新數據庫,如果尚未設置...並保存內存嗎?

說我有表「運輸」與字段名爲「狀態」。 有些設置爲發貨,有些不是。 我有一些ID,我想更新狀態發貨,如果他們還沒有設置。

A)UPDATE shipping SET status = "shipped" WHERE ID in (2, 4, 6) AND status != "shipped"

是我到目前爲止

B)是否甚至節省內存只更新需要它的人?

+0

內存?或者你的意思是磁盤空間(用於事務日誌)? – Thilo 2015-02-09 02:18:44

+0

@Thilo,我的意思是記憶。只需要更少的內存/時間來更新我需要的內容? – 2015-02-09 02:23:33

+0

/次?必須花費更少的時間來接觸更少的記錄。除非你有成千上萬的冗餘更新,否則它不認爲它在事物的宏偉計劃中很重要。 – Thilo 2015-02-09 02:26:53

回答

0

可能,這取決於你的表模式和索引

MySQL的設置字段時已經比較舊的內容,並且不寫行,如果更新後的內容保持不變。

但是,要測試舊內容,它必須加載該行。如果你有很多列,可以同時使用時間和內存(mysql在內部將varchar列解包到最大寬度)。

但是,如果查詢可以使用包含狀態的索引(例如add index (ID, status)),並且顯式檢查查詢中的狀態,那麼它可以檢查哪些行必須從快速讀取的索引中更改並可以省略加載行僅用於測試是否需要更新。

相關問題