我有一份约100K记录的工作要处理。我有很多建议将这个工作分成几块,然后处理它。
与100K记录相比,处理较小数据块有什么好处?
这样做的标准方法是什么?例如在临时表中选取10K记录并一次处理?
答案 0 :(得分:1)
我刚刚完成了一个项目 - 从多个批次的表中清除记录而不是一次清除所有记录。
问题是速度与并发性。
一次删除所有记录是最快的方法。但是,它会创建最多的锁,并且最有可能阻止其他进程。
批量删除速度要慢得多,但如果正确选择批量大小,则每个批处理运行得足够快,以至于并发不是问题。
我的项目的一个关键点是没有数据一致性问题需要担心是否所有记录都没有立即删除。
答案 1 :(得分:0)
就个人而言,我从来没有听说过这样的优化方法,如果划分为10k的块是完全随意的,那么我认为运行10次会比运行整个集合效率低一些。曾经,因为在这里处理临时表只会是开销,如果你在一个块中完成所有操作,你就可以让数据库有一个公平的机会来准确地了解你想要做什么,并选择一个适当的执行计划。这一点。
但是,如果没有任意选择10-so-k记录,但实际上逻辑上可以分成几个不同的组(比如你有一个巨大的表'图像',实际上可以分为'图库照片','配置文件照片','cms图片','屏幕截图'或whatev),如果您的流程在某些时候进行了区分,那么您可以通过始终将这些记录存储在不同的表中来帮助选择。因此,使用表将有助于数据库找到有趣的行,这与索引的方式类似。但是,除了这一点之外,我猜......
但是,如果您想要提高性能,请确保每24小时左右删除一次统计信息,以便让数据库准确了解它的内容