我正在研究的系统的一部分涉及登录mysql,计数经常更新.
插入的数据格式如下:
date | name | count | -----------+------+-------+ 2009-01-12 | alan | 5 | 2009-01-12 | dave | 2 | 2009-01-12 | mary | 1 |
这些数据定期从平面文件中解析,如上所述,为db插入/更新做准备 - 数据库上的唯一键是该(date, name)
对.
以前,此系统会检查现有表中是否有给定的记录 date
name
在决定更新或插入和对的.
我们遇到的问题是,随着这个表的增长,响应时间没有变得更好,我们希望尽可能减少查询数量.
该系统最近更新为运行一个INSERT ... ON DUPLICATE KEY UPDATE
查询,这减少了select
s 的数量,但我们的常见情况是一定距离是update
.
我想知道是否有人知道一个基本上INSERT ... ON DUPLICATE KEY UPDATE
是反向的mysql函数,即将尝试更新一行,如果没有匹配则执行插入?
我上面没有说清楚,当我有记录时我想做什么 ('2009-01-12','alan','5')
例如,是:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
如果上述操作失败,请插入以上数据.增加一个计数器的需要是为什么REPLACE
不起作用.替换执行删除和插入,并且不允许您引用要删除的行,因此count = count + 5
不会将先前的count
值增加5.
@jasoncohen - INSERT ... ON DUPLICATE KEY UPDATE
确实可以完成这项工作,但我想问是否有更优化的方法来做到这一点.
抱歉由于原始措辞不佳导致的任何混乱!