尝试插入几个时间1000行负荷,第一个查询会给你知道这是怎么花费的时间,而是由每个查询所花费的时间可能会增加
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000;
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000;
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000;
[...]
如果第二个查询不插入任何东西(不知道是否忽略语句限制之前或之后使用),你将不得不使用偏移:
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000;
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000 offset 1000;
INSERT IGNORE INTO Table2 SELECT * FROM TABLE1 limit 1000 offset 2000;
[...]
,如果它仍然太慢,你可以尝试添加一个外部联接,以避免尝试已经插入插入数据,但可能需要这两个表的性能索引(不需要主索引)。
INSERT IGNORE INTO Table2 SELECT TABLE1.* FROM TABLE1 left outer join Table2 on Table1.pk_column=Table2.pk_column where Table2.pk_column is null limit 1000;
[...]
如果仍然太慢,写一个存储过程,在初始表上循环。
为什么半个小时有关? – RiggsFolly
@RiggsFolly这只是迄今为止我尝试过的最大值,看起来相当长,不是吗? – Mariah
你看过创建的行吗?如果它们看起来正确,那就让它运行。最后你只会运行一次 – RiggsFolly