在生产服务器上,我有时需要删除几 100,000 行。查询已经过优化,但一次删除会导致服务器冻结,所以我手动分块删除,例如每次删除 5000 行。允许服务器清除挂起的查询并使表锁对最终用户不那么明显。我使用 MyISAM 引擎。
是否有一个工具 /command/ 方法可以以低优先级或分块或以一种不会让服务器卡住的方式进行这样的长查询,如果它需要很长时间才能完成?
什么是最佳做法?
在生产服务器上,我有时需要删除几 100,000 行。查询已经过优化,但一次删除会导致服务器冻结,所以我手动分块删除,例如每次删除 5000 行。允许服务器清除挂起的查询并使表锁对最终用户不那么明显。我使用 MyISAM 引擎。
是否有一个工具 /command/ 方法可以以低优先级或分块或以一种不会让服务器卡住的方式进行这样的长查询,如果它需要很长时间才能完成?
什么是最佳做法?
您可以尝试将
LOW_PRIORITY
关键字添加到DELETE
查询中,看看效果如何。例如DELETE LOW_PRIORITY FROM tablenamegoeshere ...
查看https://dev.mysql.com/doc/refman/5.5/en/delete.html了解更多详情。