我已经说过10,000个记录要替换(大多数将是Insert,但是需要替换,所以我必须使用Replace)一个包含日期,varchars,整数等的大表。该表还有一个主键和几个其他指数。我构建了一个SQL行的字符串替换。如果性能是我唯一关注的问题,那么一般来说,一次插入的最佳行数是多少?我认为它不是1.一次是10,500,1000等吗?
字符串的长度对性能有影响吗?
答案 0 :(得分:0)
我一次推荐100-1000;它将以一次一个的速度运行大约10倍。任何超过100-1000的东西都会变成“收益递减”。 (也就是说,你不会得到更多改进。)
但是......还有其他值得注意的事情。
REPLACE
是DELETE
(可能会删除零行),加上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中提及了大部分内容。