比方說,我有一個收件箱系統與讀取/未讀消息。我希望消息在打開後切換爲未讀消息。更新所有地方與計數然後更新
每次打開消息, 檢查消息是否未讀取消息的主鍵上的WHERE子句時,使用WHERE子句指定unread = 1,然後如果計數優於0,UPDATE更好入口到所讀取的字段設置爲1,
,或者
每次做一個更新查詢與WHERE子句中指定的消息的主鍵和讀字段= 0
爲了清楚起見,是它更好地做到這一點
SELECT COUNT(*) FROM messages WHERE messages.id = 1 AND messages.read = 0
if (query_above > 0)
UPDATE messages SET messages.read = 1 WHERE messages.id = 1
或
UPDATE messages SET messages.read = 1 WHERE messages.id = 1 AND messages.read = 0
我不願意找一個更好的辦法在這種情況下,要做到這一點;在任意情況下這是一個純粹的性能問題。
2查找與1查找。應該很清楚。 – Sirko
是否有你試圖超優化這個原因?你認爲'UPDATE消息SET messages.read = 1 WHERE messages.id = 1'會在你讀''已經是'1'時引發問題嗎?此外,是否有可能多個連接同時嘗試同一個操作,而不是同一條消息?這樣首先計算可能會導致您採用陳舊的信息? –
不,沒有:)我多年來一直在使用第二種解決方案,我一直在想如果這是做這件事的最好方式,因爲我已經看到其他人以相反的方式做。 – whitep4nther