目前我正在使用的系統的一部分涉及mysql中的日誌,計數頻繁更新。如果更新失敗,MySQL函數插入記錄?
被插入的數據是格式:
date | name | count |
-----------+------+-------+
2009-01-12 | alan | 5 |
2009-01-12 | dave | 2 |
2009-01-12 | mary | 1 |
該數據被定期從平面文件,在用於分貝插入/更新準備概括爲上述解析 - 在數據庫上的唯一鍵是(date, name)
雙。
以前,在決定更新或插入之前,此係統會檢查現有表中是否存在給定date
和name
對的任何記錄。
我們遇到的問題是,隨着此表的增長,響應時間並沒有變得更好,我們希望儘可能減少查詢次數。
該系統最近進行了更新運行INSERT ... ON DUPLICATE KEY UPDATE
查詢,已略微降低的select
S上的數字,但我們的一些距離常見的情況是update
。
我想知道是否有人知道一個mysql函數的本質是INSERT ... ON DUPLICATE KEY UPDATE
反向,即將嘗試更新一行,如果沒有匹配,然後執行插入?
編輯
我沒有做它上面的太清楚,我想,當我有記錄('2009-01-12','alan','5')
例如做什麼,就是:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
,如果上面的失敗,插入上面的數據。增加計數器的需要是爲什麼REPLACE
不起作用。更換執行刪除操作&插入,並且不會讓你指的是該行被刪除,所以count = count + 5
不會增加由5
@jasoncohen以前count
值 - INSERT ... ON DUPLICATE KEY UPDATE
不會做的工作,但我我問是否有更好的方法來做到這一點。
對不起原始措辭造成的任何混淆!
有道理,希望得到更多的希望比期望有一些神奇的,超級執行的MySQL查詢! – ConroyP 2009-01-25 20:51:15