mysql - 插入 ... 在重复 key 更新与截断/插入时

标签 mysql database

我目前正在重写一个数据推送脚本,该脚本从另一台服务器上的 MSSQL 数据库中提取数据,然后将数据插入 MySQL 数据库中。此过程按计划每晚运行,并通过 PHP 处理。

原始脚本TRUNCATE s 表并每晚重新插入所有数据。一些表具有来自 MSSQL 数据库的唯一主键。有些表格没有。

我正在考虑将通用主键添加到目前没有它们的 MySQL 表中,所以我可以做 INSERT ... ON DUPLICATE KEY UPDATE而不是每晚清空表并重新插入数据。除了这个过程之外,没有其他原因会使用主键。

如果我执行INSERT ... ON DUPLICATE KEY UPDATE,这个过程会更快/资源消耗更少吗?与 TRUNCATE 相比然后 INSERT 就像脚本当前那样?在目前没有通用主键的表上创建通用主键是否值得,只是为了执行 INSERT ... ON DUPLICATE KEY UPDATE ?我正在寻找此脚本的最佳性能。

最佳答案

如果不了解您的数据的具体情况,就很难给出一个笼统的答案。我想知道行中表的大小,以及您是否使用 Innodb。但是,如果表小于 1000 行,和/或不使用 Innodb,我将保持原样。但是,如果您有大表,我发现使用 INSERT..ON DUPLICATE 方法可以显着提高速度。

一个好的过程可能是切换一个或两个较大的表并衡量您的速度改进。如果值得,则继续进行其余部分。

关于mysql - 插入 ... 在重复 key 更新与截断/插入时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616596/

相关文章:

c++ - MFC中的数据库

mysql - 如何使用 TRIM 从序列化字段中获取值

MySQL InnoDB : autoincrement non-primary key

php - 将 blob 文件/图像上传到 Mysql

php - 通过 PHP 将 ♥ 插入 MySQL(心形)

数据库派生值与外键相同?

mysql - 按 IP 排序然后继续选择记录,直到我有 3 个唯一的 IP

mysql - 警告 : The connection is going to be closed but there is an active transaction

MySQL合并标签记录

需要 PHP 用户登录、数据库身份验证和重定向帮助