mysql删除效率

时间:2010-08-18 19:31:03

标签: mysql performance

我有一张包含大量数据的表格。需要经常更新数据:删除旧数据并添加新数据。我有两个选择

  1. 每当有删除事件时,我立即删除该条目
  2. 我标记了删除条目并使用cron作业在非高峰时删除。
  3. 两种选择之间的任何效率差异?或者更好的解决方案?

3 个答案:

答案 0 :(得分:1)

  • 删除和更新都有触发器,这可能会影响性能(检查是否属于您的情况)。
  • 更新行通常比删除(由于索引等)
  • 更快

但是,在删除操作中的单行时,性能影响不应该那么大。如果您的测量显示数据库花费大量时间删除行,那么您的标记和扫描方法可能会有所帮助。这里的关键词可能是测量 - 除非单个删除明显慢于更新,我不会打扰。

答案 1 :(得分:0)

您应该使用low_priority_updates - http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_low_priority_updates。这将为您的选择提供比插入/删除/更新操作更高的优先级。我在生产中使用了这个并获得了相当不错的速度提升。我看到的唯一问题是,如果服务器崩溃,您将丢失更多数据。

答案 2 :(得分:0)

使用MySQL,删除内部只是标记为删除,当CPU(几乎)空闲时,MySQL会更新索引。

但是,如果这是一个问题,并且您要删除多行,请考虑使用DELETE QUICK。这告诉InnoDB不要更新索引,只需将其标记为已删除,因此可以重复使用。

要恢复未使用的索引空间,请每晚只进行OPTIMIZE TABLE。

在这种情况下,不需要在应用程序中实现MySQL内部执行的功能。