在大表中删除记录时,MySQL很慢

时间:2013-05-15 00:41:08

标签: mysql database performance

我有一个像这样的查询需要很长时间才能运行。该表约有400万行。

DELETE FROM TABLE WHERE value_was IS NULL OR value_was <= value_now;

我希望我能为(value_was,value_now)创建一个索引,所以我可以做类似的事情

DELETE FROM TABLE WHERE 
ID1 IN (SELECT ID1 from TABLE where value_was IS NULL) 
OR ID2 IN (SELECT ID2 FROM TABLE WHERE value_was <= value_now);

此表没有主键。它有两个复合键。我想我不能在子查询中使用相同的表,但是如何提高第一个查询的性能呢?

非常感谢任何建议都会非常感激。

更新: db是innoDB

1 个答案:

答案 0 :(得分:7)

由于数据的存储方式,作为内部链表,innoDB表在巨大的DELETE操作中本质上很慢。将存储类型更改为myISAM应该会使操作更快 - 我在类似的情况下看到了100倍的改进。