替换上的MYSQL字符串和性能

时间:2015-07-04 17:18:37

标签: mysql performance replace

我已经说过10,000个记录要替换(大多数将是Insert,但是需要替换,所以我必须使用Replace)一个包含日期,varchars,整数等的大表。该表还有一个主键和几个其他指数。我构建了一个SQL行的字符串替换。如果性能是我唯一关注的问题,那么一般来说,一次插入的最佳行数是多少?我认为它不是1.一次是10,500,1000等吗?

字符串的长度对性能有影响吗?

1 个答案:

答案 0 :(得分:0)

我一次推荐100-1000;它将以一次一个的速度运行大约10倍。任何超过100-1000的东西都会变成“收益递减”。 (也就是说,你不会得到更多改进。)

但是......还有其他值得注意的事情。

REPLACEDELETE(可能会删除零行),加上INSERT。这比INSERT ... ON DUPLICATE KEY UPDATE ...慢,INSERTs或更改您要更改的内容(可能是所有列)。

如果您正在使用AUTO_INCREMENT ...使用REPLACE,您将丢弃任何现有ID并创建新ID。从长远来看,可能在用完ID时出现问题。

如果您不想浪费任何 AUTO_INCREMENT ID,那就让我们进一步讨论。

如果涉及复制,则100优于1000;如果你想知道原因,请告诉我。

字符串的长度限制为max_packet_length,默认为8MB。

使用InnoDB,只需使用autocommit = 1即可随时提交每个IODKU。

总结:为了提高性能,请使用IODKU并构建字符串,直到达到7MB或1000行为止,以先到者为准。

Rick's Rules of Thumb中提及了大部分内容。