我正在使用两个不同的数据库表进行测试,其中我将每 X 秒运行一次 CRON 来运行我所做的 PHP 脚本。我对许多行(3,000,000+)进行了许多测试,在我得到的更优化的代码中,检查它是否包含从表 X 到 Y 的更新/插入,花了 17 秒。
当我取消对 UPDATE/INSERT 的检查并替换为 REPLACE 时,时间减少到令人难以置信的 4 秒。
我的问题是关于它的效果,因为速度太快而且我没有看到很多人使用它?由于这是从数据库X到数据库Y的表,因此将通过PRIMARY KEY检查更新,即它不会包含自动增量。
RESUME:我需要将一个表与另一个表同步,使用 REPLACE 运行脚本,这比检查它是否包含更新和插入要快得多。替换的真正缺点是什么?
最佳答案
请提供SHOW CREATE TABLE
以及您使用的SQL语句。
REPLACE
可能不等效。
考虑使用INSERT ... ON DUPLICATE KEY UPDATE ...
;它可能比REPLACE
更快。
REPLACE
实际上是两个命令的组合 - 基于任何唯一(或主)键的 DELETE
,然后是 INSERT
。 REPLACE
实际上可以减少行数!
“同步”可能意味着存在(或不存在)任何"new"行。并且有(或没有)行要删除。不同的技术成功(或失败)取决于这些细节。例如,REPLACE
可能无法在同步期间删除任何行。
如果您仅INSERTing
或UPDATEing
(从不DELETEing
),请参阅http://mysql.rjweb.org/doc.php/staging_table#normalization 中的两个SQL 语句。 -- 它们可能比您的REPLACE
还要快。
如果您的新表是完全替代品,为什么要同步?为什么不RENAME TABLE
——这只需要几毫秒,并且可以不间断地完成。
关于php - 效果附属品替换 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47536490/