在生产服务器上,我有时需要删除几十万行。查询已优化,但一次删除会导致服务器冻结,因此我手动分批删除,例如每次删除 5000 行。为了让服务器清除待处理的查询并使表锁定对最终用户不那么明显。我使用 MyISAM 引擎。
是否存在一个工具/命令/方法,可以以低优先级或分块的方式执行此类长查询,或者在需要很长时间才能完成的情况下以不会让服务器卡住的方式执行此类长查询?
最佳实践是什么?
答案1
您可以尝试将LOW_PRIORITY
关键字添加到DELETE
查询中,看看效果如何。例如DELETE LOW_PRIORITY FROM tablenamegoeshere ...