5

我有一个包含大约 550 万行数据的 MySql 表。每个月我都需要用一个新的数据文件重新加载这些数据。由于删除旧数据需要一段时间,因此我添加了 limit 2000000 以将作业分成块。例子:

DELETE FROM `list_content` WHERE list_id = 3 limit 2000000

我的理论是,查询完成后可能会释放内存,并且像这样将其拆分成块可能有利于不消耗资源。但是我还没有找到任何支持我的理论的东西。拆分这样的查询而不是让它运行 20 分钟有什么好处吗?

4

1 回答 1

1

直接回答您的问题 - 没有任何好处。假设您没有达到任何物理限制(例如您的操作系统支持的最大物理内存量)并且 MySQL 是一个编写良好的程序,那么不会。

您可能会考虑的几件事

(1)

DELETE QUICK FROM `list_content` WHERE list_id = 3

其次是

OPTIMIZE TABLE `list_content`

DELETE QUICK将不会在索引块上执行任何内务处理作为其删除。OPTIMIZE TABLE然后,您可以使用该语句一次完成所有内务管理。

(2)

如果您要清除整个表,则将新数据加载到新表中...调用它list_temp

DROP TABLE `list_content`; -- very quick since this is simple a delete file op
RENAME TABLE `list_temp` to `list_content`; -- also quick since this is a file rename op
于 2013-11-05T16:48:28.073 回答