我有一些InnoDB MySQL表的PK ID。 我想尽快通过PK删除记录。 ID是完全随机的,没有办法按间隔删除它们。 我想最好的方法是用IN(...)谓词
删除它们但是如果我把它全部放到一个DELETE FROM T WHERE id IN(...)它就可以工作:1-2个小时可以完成150万个recs。
可能我应该把它分成几批,但批量的大小是最优的?
答案 0 :(得分:0)
不。最好的是一个查询。没有批次。
应该增加 innodb_buffer_pool_size
以加速磁盘上的表重新排序。
否则:
如果您的桌子上没有CONSTRAINT
,请改用MyIsam。
否则:
我相信你应该为innodb_buffer_pool_size
找到更多的记忆。
答案 1 :(得分:0)
案例1
如果要删除超过一半的表,请执行
INSERT ...
将所需的行复制到new
。RENAME TABLE real TO old, new TO real;
(警告:我不知道"一半"是否是最佳的。)
案例2
如果你可以这样做。这将减少表格中可能发生的来回数量。
批量处理;也许每次1000个。为什么?对于InnoDB来说,这限制了很多家庭和#34;撤消"必须记录信息,以防它崩溃。并打开自动提交,以便每个批处理将关闭撤消日志。