我目前正在重写一个数据推送脚本,它从另一台服务器上的MSSQL数据库中提取数据,然后将数据插入到MySQL数据库中。该进程被设计为每晚运行一次,并通过PHP处理。
原始脚本TRUNCATEs表,并每晚重新插入所有数据。有些表具有来自MSSQL数据库的唯一主键。有些表格不是这样。
我正在考虑将通用主键添加到当前没有通用主键的MySQL表中,因此我可能会执行一次INSERT ... ON DUPLICATE KEY UPDATE,而不是每天晚上清空这些表并重新插入数据。除了这个过程之外,主键不会被用于任何其他原因。
如果像脚本一样先执行INSERT ... ON DUPLICATE KEY UPDATE而不是TRUNCATE,然后执行INSERT,那么该过程是否会更快/占用更少的资源?为了做一个INSERT ... ON DUPLICATE KEY UPDATE,在当前没有泛型主键的表上创建泛型主键值得吗?我正在寻找这个脚本可能的最佳性能。
发布于 2013-10-01 01:59:46
在不了解数据细节的情况下,很难给出一个通用的答案。我想知道表的行的大小,以及您是否使用Innodb。但是,如果表很小,小于1000行,并且/或者没有使用Innodb,我就会保留原样。但是,如果您有较大的表,我已经看到使用INSERT..ON复制方法在速度上有了显著的提高。
一个好的过程可能是切换一个或两个较大的表,并测量您的速度改进。如果值得,那就继续做剩下的事情。
https://stackoverflow.com/questions/18616596
复制相似问题