影响抵押品REPLACE MySQL

时间:2017-11-28 16:32:30

标签: php mysql performance

我正在使用两个不同的数据库表进行测试,我每隔X秒运行一次CRON来运行我做过的PHP脚本。我做了很多测试工作很多行(3,000,000+)在我得到的更优化的代码中,检查它是否包含从表X到Y的更新/插入,花了17秒。

当我取消对UPDATE / INSERT的检查并替换为REPLACE时,时间减少到令人难以置信的4秒。

我的问题是关于它的影响,因为这么快,我没有看到很多人使用它?由于这是从数据库X到数据库Y表的表,因此检查更新将是PRIMARY KEY,即它不包含自动增量。

RESUME :我需要将一个表与另一个表同步,使用REPLACE运行脚本,我检查它是否包含更新和插入速度要快得多。替换的真正缺点是什么?

1 个答案:

答案 0 :(得分:0)

请提供SHOW CREATE TABLE以及您使用的SQL语句。

可能REPLACE 不等于

考虑使用INSERT ... ON DUPLICATE KEY UPDATE ...;它可能REPLACE快。

REPLACE实际上是两个命令的组合 - DELETE基于任何唯一(或主要)键,然后是INSERTREPLACE实际上可以缩小行数!

“同步”可能意味着存在(或没有)任何“新”行。并且有(或没有)要删除的行。根据这些细节,不同的技术会成功(或失败)。例如,REPLACE可能无法在同步过程中删除任何行。

如果您只是INSERTingUPDATEing(从不DELETEing),请参阅http://mysql.rjweb.org/doc.php/staging_table#normalization中的两个SQL语句 - 它们可能比您的{{1}更快}}

如果您的新表格是完整的替代品,为何要同步?为什么不REPLACE - 这只需要几毫秒,而且可以不间断地完成。