INSERT .... ON DUPLICATE和自动增加问题

时间:2016-01-24 02:20:50

标签: mysql

当您在数据库服务器上执行数十万次查询时,请从

切换
SELECT foo FROM bar WHERE rec_id=xyz
if (!record_found){
    INSERT INTO bar (x,y,z) VALUES (1,2,3)
}

为:

INSERT INTO bar (x,y,z) VALUES (1,2,3) ON DUPLICATE KEY UDPATE count=count+1

获得了巨大的业绩增长。服务器上的CPU负载急剧下降。但是,如果表中的字段设置为自动递增,则会失去连续性,并且它们会以非常快的速度增加。

我不关心自动增量字段的连续性,但是我有点担心自从遇到大量重复记录以来自动增量字段在此时膨胀的指数速率。我们正在讨论当数据库中的实际记录数接近50万(一周内)时,自动增量值达到1000万的值。

该字段属于BIGINT(20)类型,所以我还有很长的路要走。我也明白,一旦它增加了几个数量级,变化率可能就不那么显着了。如果我违反了这个限制,我可以继续扩大这个领域吗?这是处理这种情况的最佳方法吗?

2 个答案:

答案 0 :(得分:1)

只需在insert中包含rec_id(您似乎知道它似乎是一个关键,可能是主键):

mix.exs

答案 1 :(得分:1)

在问题的评论中回答问题:

在插入忽略失败(可以这么说)时会增加AUTO_INCREMENT。

document.body.scrollTop = 100;
window.dispatchEvent(new window.UIEvent('scroll', { detail: 0 }));

整个指数差距异常是一个众所周知的特征" of innodb。我们大多数人都接受它并继续前进。