INSERT ... ON DUPLICATE KEY UPDATE vs TRUNCATE / INSERT

时间:2013-09-04 14:30:04

标签: mysql database

我目前正在重写一个数据推送脚本,该脚本将数据从另一台服务器上的MSSQL数据库中提取出来,然后将数据插入到MySQL数据库中。这个过程可以在夜间运行并通过PHP处理。

原始脚本TRUNCATE是表格,每晚重新插入所有数据。某些表具有来自MSSQL数据库的主要唯一密钥。有些表没有。

我正在考虑将通用主键添加到当前没有它们的MySQL表中,这样我就可以执行INSERT ... ON DUPLICATE KEY UPDATE而不是清空表并每晚重新插入数据。在此过程中,主键将无其他原因使用。

如果我执行了INSERT ... ON DUPLICATE KEY UPDATE而不是TRUNCATE然后INSERT,那么这个过程会更快/更少资源吗?是否值得在桌面上创建通用主键的麻烦,目前只有INSERT ... ON DUPLICATE KEY UPDATE才能创建它们?我正在寻找这个剧本中最好的表现。

1 个答案:

答案 0 :(得分:0)

如果不知道数据的具体情况,很难给出一般答案。我想知道行中表的大小,如果你使用的是Innodb。但是,如果表格小于< 1000行,和/或没有使用Innodb,我会保持原样。但是,如果你有大表,我已经看到使用INSERT..ON DUPLICATE方法显着提高了速度。

一个好的过程可能是切换一个或两个较大的表并测量你的速度改进。如果值得,那么继续进行其余的工作。