sql - 处理大表 - 如何逐页选择记录?

标签 sql oracle pagination

我需要对表中的所有记录进行处理。该表可能非常大,因此我宁愿逐页处理记录。我需要记住已经处理过的记录,这样它们就不会包含在我的第二个 SELECT 结果中。

像这样:

对于第一次运行, [从 MyTable 中选择 100 条记录]

对于第二次运行, [从 MyTable 中选择另外 100 条记录]

等等..

希望你能看到这张照片。我的问题是如何编写这样的选择语句?

顺便说一句,我正在使用 oracle,但如果我也可以在任何其他数据库上运行,那就太好了。 我也不想使用存储过程。

非常感谢!

最佳答案

您想出的将表分成更小块的任何解决方案最终都会比一次性处理所有内容花费更多的时间。除非表已分区并且您一次只能处理一个分区。

如果全表扫描需要 1 分钟,那么将表分解为 10 个部分将需要 10 分钟。如果表行按您可以使用的索引列的值进行物理排序,则由于集群因素,这会发生一些变化。但无论如何,它比一次性处理它需要更长的时间。

当然,这完全取决于处理表中的一行需要多长时间。您可以选择通过处理数据 block 来减少服务器上的负载,但从性能角度来看,您无法击败全表扫描。

关于sql - 处理大表 - 如何逐页选择记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486194/

相关文章:

Mysql group post_id 按最大计数状态

mysql - SQL语句是否立即执行?

java - Oracle SQL - 计算并发事件数

php - 分页 - 检查是否存在下一个/上一个记录

elasticsearch - 如何使用search_after从elasticsearch获取上一页?

java - 如何在 Spring Data JPA 中表示带有空值的表?

java - ORA-00933 SQL 命令未正确结束但在 SQL Developer 中正常

oracle - 如何设置从 Linux RedHat 64 位上的 Oracle 10gR2 到 Linux RedHat 64 位上的 Postgresql 8.3 的 dblink?

reactjs - 使用 react-redux-firebase 库的分页 firestore

mysql - 将子查询转换为连接