MySQL IN(..)谓词的最佳参数大小

时间:2015-09-01 12:49:42

标签: mysql query-performance

我有一些InnoDB MySQL表的PK ID。 我想尽快通过PK删除记录。 ID是完全随机的,没有办法按间隔删除它们。 我想最好的方法是用IN(...)谓词

删除它们

但是如果我把它全部放到一个DELETE FROM T WHERE id IN(...)它就可以工作:1-2个小时可以完成150万个recs。

可能我应该把它分成几批,但批量的大小是最优的?

2 个答案:

答案 0 :(得分:0)

不。最好的是一个查询。没有批次。

应该增加

innodb_buffer_pool_size以加速磁盘上的表重新排序。

否则:

如果您的桌子上没有CONSTRAINT,请改用MyIsam。

否则:

我相信你应该为innodb_buffer_pool_size找到更多的记忆。

答案 1 :(得分:0)

案例1

如果要删除超过一半的表,请执行

  1. `CREATE TABLE new LIKE real;
  2. INSERT ...将所需的行复制到new
  3. RENAME TABLE real TO old, new TO real;
  4. (警告:我不知道"一半"是否是最佳的。)

    案例2

    如果你可以这样做。这将减少表格中可能发生的来回数量。

    批量处理;也许每次1000个。为什么?对于InnoDB来说,这限制了很多家庭和#34;撤消"必须记录信息,以防它崩溃。并打开自动提交,以便每个批处理将关闭撤消日志。