3

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

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

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

如果我按照脚本当前的方式执行与然后INSERT ... ON DUPLICATE KEY UPDATE相比,该过程会更快/更少资源密集型吗?在当前没有它们的表上创建通用主键只是为了做一个麻烦是否值得?我正在寻找这个脚本的最佳性能。TRUNCATEINSERTINSERT ... ON DUPLICATE KEY UPDATE

4

1 回答 1

0

在不了解数据细节的情况下很难给出一般性答案。我想知道行中表的大小,以及您是否使用 Innodb。但是,如果表小于 1000 行,和/或不使用 Innodb,我会保持原样。但是,如果您有大型表,我已经看到使用 INSERT..ON DUPLICATE 方法显着提高了速度。

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

于 2013-09-30T17:59:45.530 回答