【发布时间】:2009-01-22 16:04:15
【问题描述】:
我目前正在处理的部分系统涉及登录 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 查询,这略微减少了selects 的数量,但我们的常见情况是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 不起作用的原因。 Replace 执行删除和插入操作,并且不允许您引用被删除的行,因此 count = count + 5 不会将之前的 count 值增加 5。
@jasoncohen - INSERT ... ON DUPLICATE KEY UPDATE 确实可以完成这项工作,但我想问是否有更优化的方法来做到这一点。
对于因原始措辞不佳造成的任何混乱,我们深表歉意!
【问题讨论】:
标签: optimization mysql