首页 文章

在ORACLE中使用OFFSET进行SELECT查询

提问于
浏览
0

我需要从包含1kkk行的表上的java代码中执行SELECT查询,因此结果集将接近1kk行 . 这就是为什么我需要限制它,并多次运行选择查询,每次只检索10k行 . 在我得到10k行后,我更新它,所以在下一个SELECT中它们将不被检索 . 问题是 - 在每个选择oracle从表中的第一行看,因此它会降低性能 . 如何使用OFFSET避免从第一行查找oracle并传递已更新的行?

1 回答

  • 8

    这些解决方案都没有真正提高性能 .

    您有一个250,000行的数据集,并以10,000个批量获取它们 . 除非你有一个与数据库的有状态连接并保持SELECT语句正在进行中(在oracle术语中这是'保持游标打开'),然后每个选择都独立于最后一个 .

    因此,要将批次从180,001提取到190,000,它仍然需要排序,以便它可以计算出前190,000行 . 诸如OFFSET之类的句法糖不会改变数学和逻辑的基本规则 .

    要获得最佳性能,您需要保持结果集处于打开状态,并始终从中获取行 . 不要关闭它,也不要重新发出选择 .

相关问题