php - 效果附属品替换 MySQL

标签 php mysql performance

我正在使用两个不同的数据库表进行测试,其中我将每 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,然后是 INSERTREPLACE实际上可以减少行数!

“同步”可能意味着存在(或不存在)任何"new"行。并且有(或没有)行要删除。不同的技术成功(或失败)取决于这些细节。例如,REPLACE 可能无法在同步期间删除任何行。

如果您仅INSERTingUPDATEing(从不DELETEing),请参阅http://mysql.rjweb.org/doc.php/staging_table#normalization 中的两个SQL 语句。 -- 它们可能比您的REPLACE还要快。

如果您的新表是完全替代品,为什么要同步?为什么不RENAME TABLE——这只需要几毫秒,并且可以不间断地完成。

关于php - 效果附属品替换 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47536490/

相关文章:

PHP - 数组的 else 参数不起作用

php - 获取逗号分隔字符串中包含的行

MySQL 选择多个变量不起作用

python - 哪个更适合 Python 3 中的字符串反转?

java - Hibernate session REST 性能/安全性

php - Laravel 连接两个表

php - PDO 类甚至不工作

带有 git 和 phpfog 的 Php 多数据库环境

php - 从另一个减去 PHP 变量

android - Galaxy 10.1 运行应用比 Thunderbolt 慢