我们有一个 SELECT 语句,大约需要。 3秒执行。我们在嵌套的 While 循环中调用此 DB2 查询。
例如:
虽然(hashmap1.hasNext()){ while(hashmap2.hasNext()){ 查询 }
问题是,外部 While 循环将执行大约。 1200 次,内部 While 循环将执行 200 次。这意味着 SQL 将被调用 1200*200 = 240,000 次。约外部 While 循环的每次迭代将花费 150 秒。所以,1200 * 150 秒 = 50 小时。
在我们开始下一个流程之前,我们只能花大约 12-15 小时的时间。
有没有办法快速完成这个过程?任何可以帮助我们更快地从 DB2 中获取这些记录的新技术。
如有任何帮助,我们将不胜感激。
注意:我们已经研究了所有可能的方法来减少迭代次数。
最佳答案
在我看来,您正试图将中间层用于数据库本身更适合的用途。这是一个经典的“N+1”查询问题。
我将重写此逻辑以作为正确索引的 JOIN 完全在数据库上执行。这不仅会减少所有网络来回的流量,还会让数据库优化器承担并节省您将所有数据带到中间层进行处理的费用。
关于Java - DB2 性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101101/