我需要从包含1kkk行的表上的java代码中执行SELECT查询,因此结果集将接近1kk行.这就是为什么我需要限制它,并多次运行选择查询,每次只检索10k行.在我得到10k行后,我更新它,所以在下一个SELECT中它们将不被检索.问题是 - 在每个选择oracle从表中的第一行看,因此它会降低性能.如何使用OFFSET避免从第一行查找oracle并传递已更新的行?
这些解决方案都没有真正提高性能.
您有一个250,000行的数据集,并以10,000个批量获取它们.除非你有一个与数据库的有状态连接并保持SELECT语句正在进行中(在oracle术语中这是'保持游标打开'),然后每个选择都独立于最后一个.
因此,要将批次从180,001提取到190,000,它仍然需要排序,以便它可以计算出前190,000行.诸如OFFSET之类的句法糖不会改变数学和逻辑的基本规则.
要获得最佳性能,您需要保持结果集处于打开状态,并始终从中获取行.不要关闭它,也不要重新发出选择.
| 归档时间: |
|
| 查看次数: |
1832 次 |
| 最近记录: |