5

我有一个这样的查询需要很长时间才能运行。该表大约有 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);

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

非常感谢任何建议将不胜感激。

更新:数据库是 innoDB

4

1 回答 1

7

由于数据的存储方式,作为内部链表,innoDB 表在大型DELETE操作中天生就很慢。将存储类型更改为myISAM应该会使操作快得多 - 我已经看到在类似情况下有 100 倍的改进。

于 2013-05-15T00:47:06.290 回答