我想到的选项:
一大删除语句。例如:
delete from x where (y = 'x' and x = 'y') or (y = 'a' and x = 'b')
Run Code Online (Sandbox Code Playgroud)和上面一样,但是分成小块,一次 10k?
创建一个存储过程,所以我发送的只是两个查询值。
4M 中的 92K 仍然只占您记录的 2.3%。我建议您的第一个选择,只需将您要删除的内容扔到数据库中,然后让数据库对其进行整理(如果您一次将其全部交给数据库,它可能会比您打包它更有效)出去)。我建议分块的唯一时间是,如果您的应用程序对时间要求严格并且您担心会减慢它的速度(在这种情况下,另一种解决方案是在非工作时间进行)。
如果您从表中取出 20-30% 或更多的记录,我建议删除索引、执行删除和重新创建索引,然后是OPTIMIZE TABLE
,但对于表中 2% 的记录,索引重建开销是不值得的(只是在删除记录时保持索引最新会更快)。
也就是说,在您完成删除后,运行OPTIMIZE TABLE
可能不是一个坏主意 - 但不要在高峰时段这样做。
归档时间: |
|
查看次数: |
6276 次 |
最近记录: |