在唯一列中插入重复值是否更快或首先检查是否已插入

时间:2018-03-09 13:37:32

标签: php mysql

我的表中有一个唯一的列,它是由app生成的一些长字符串id

现在,我使用INSERT是否更快,如果表格中已存在id,则不会发生任何事情,或者我首先使用SELECT查看是否更好id已经在表格中,如果它不是,那么我插入它?

1 个答案:

答案 0 :(得分:3)

在所有条件相同的情况下,如果行不存在,我希望简单的插入更快,因为您正在执行两个语句 - 检查和插入。缺点是,如果该行存在,您的调用将抛出一个您必须处理的错误。

根据您想要的行为,您有几个选择:

检查是否存在,如您所述。如果您不想使用新信息更改现有记录中的任何内容,这是很好的。然后处理你的错误,这样他们就不会被推上电话。

INSERT IGNORE将忽略任何重复的键错误;它也会忽略任何其他错误,因此我会建议反对它。

REPLACE执行基本的UPSERT样式命令 - 如果未找到重复则插入,如果找到重复则更新。 "成本"是否总是将完整记录写入数据库,即使没有任何更改。

INSERT ... ON DUPLICATE UPDATE有点像REPLACE,但它允许您指定要更新的值,甚至可能添加不同的信息而不是插入的值(如果需要)。

REPLACE和ON DUPLICATE之间存在一些关键差异,我建议您查看这个问题,以获得更长时间的细分:What are practical differences between `REPLACE` and `INSERT ... ON DUPLICATE KEY UPDATE` in MySQL?