分解大型MySql查询是有益的

时间:2013-11-05 15:09:37

标签: mysql

我有一个MySql表,有大约550万行数据。每个月我都需要使用新的数据文件重新加载这些数据。由于删除旧数据需要一段时间,我将添加限制2000000以将作业拆分为块。例如:

DELETE FROM `list_content` WHERE list_id = 3 limit 2000000

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

1 个答案:

答案 0 :(得分: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