MySQL性能DELETE还是UPDATE?

时间:2009-05-05 13:50:24

标签: mysql performance

我有一个超过10 ^ 7行的MyISAM表。向其添加数据时,我必须在最后更新~10行。删除它们然后插入新的更快,还是更新这些行更快?应更新的数据不是索引的一部分。那么索引/数据碎片呢

5 个答案:

答案 0 :(得分:21)

UPDATE要快得多。

当您UPDATE时,表记录刚刚被新数据重写。

当您DELETE时,应该更新索引(记住,您删除整行,而不仅仅是您需要修改的列),并且可以移动数据块(如果您达到PCTFREE限制)

所有这些必须在INSERT再次完成。

这就是你应该总是使用

的原因
INSERT ... ON DUPLICATE KEY UPDATE

而不是REPLACE

前一个是关键违规时的UPDATE操作,而后一个是DELETE / INSERT

答案 1 :(得分:4)

更新速度更快。您还可以使用INSERT ON DUPLICATE KEY UPDATE

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

有关详细信息,请参阅更新documentation

答案 2 :(得分:2)

为了提高性能,我不考虑删除或更新数据,而是考虑进行分区。

http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html

这样您就可以保留历史数据而不会降低性能。

答案 3 :(得分:1)

逻辑DELETE + ADD = 2个动作,UPDATE = 1个动作。同时删除和添加新的更改会在auto_increment上记录ID,因此如果这些记录的关系会被破坏,或者也需要更新。我会去更新。

答案 4 :(得分:0)

使用更新,其中Column ='something'应该使用索引,只要搜索条件在索引中(无论是搜索还是扫描都是完全不同的问题)。

如果您经常进行这些更新但是没有在条件列上有索引,我建议您在使用的列上创建索引。这应该有助于加快速度。