我目前正在重写一个数据推送脚本,该脚本从另一台服务器上的 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/