2011-05-05 85 views
3

我查询大多数时间将更新现有的记录。 但是,我需要检查这条记录是否存在,如果不存在,我应该创建它。MySql性能:插入...在重复密钥更新或更新和ROW_COUNT

通常我会用INSERT...ON DUPLICATE KEY UPDAT,但只有少数查询需要插入我在想这样做,如果用返回的ROW_COUNT()是零UPDATE和后者检查在这种情况下做一个INSERT的。

什么会给我最好的表现?

+2

我想你应该试试看。唯一的密钥查找将以任何方式执行,第一个选择('INSERT ... ON DUPLICATE KEY UPDAT')会稍微好一些。请用成千上万的记录试试它,并返回结果。它只需要几分钟。 :) – bpgergo 2011-05-05 10:07:42

+0

其实我通过从应用程序发送一个标志来表明一个新的记录。这将有最好的性能,当然:) 我会尽力尝试,如你后面的建议。 但是如果无论如何都要进行独特的检查,那么这应该比update和row_cound的确有更好的性能。谢谢! – IgalSt 2011-05-05 10:24:55

+0

当您信任应用程序中的标志时,请注意:如果多个用户同时使用同一个应用程序,那么在其中一个用户添加记录时,这些标志可能会失效!更好地使用'INSERT ... ON DUPLICATE KEY UPDATE'方法。顺便问一下,你是否真的需要担心执行这个查询?如果做很多这些查询,它可能只会影响性能。 – Bart 2011-05-05 10:28:38

回答

1

MySQL有一个REPLACE INTO语法,可能是你在找什么。如果这不起作用,那么使用UPDATE和检查ROW_COUNT()应该可以工作,你可能想把整个事情包装在一个存储过程中,这样你就可以保存自己回到服务器。