mysql删除效率

问题描述:

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

  1. ,无论是否存在缺失事件,我删除的条目立即
  2. 我打上删除的条目,并使用cron作业删除在unpeak时间。

这两个选项之间有什么效率差?或者更好的解决方案?

+0

有多大?数千行,数百万? – 2010-08-18 19:49:26

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

然而,在操作删除一行,对性能的影响应该不会那么大。如果您的测量结果显示数据库花费大量时间删除行,那么您的标记和扫描方法可能会有所帮助。这里的关键词大概是,测量值为 - 除非单次删除比更新速度慢得多,否则我不打扰。

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

对于MySQL,删除只是在内部标记为删除,并且当CPU(几乎)空闲时,MySQL会更新索引。

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

要恢复未使用的索引空间,每晚简单地进行OPTIMIZE TABLE。

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