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