如何要求DB2一次返回100万行中的1000行数据



我目前正在为事件处理网络(EPN)构建一个模拟器。我有一个静态数据库,它将作为数据源。我的主表包含汽车的地理位置(横向/纵向坐标)。

在超过一百万行的可用坐标中,我想我需要一次检索1000行的数量级,因为我不想"淹没"我的EPN。我的(现实生活)数据源的性质表现为,随着汽车沿着路线行驶,地理位置会随着时间的推移而出现。因此,我想通过静态数据集按照最老最新的顺序获取最早的地理数据和进度。这至少会给我一个"订单随时间变化"的顺序。

计划是在兔子队上排1000排,让消费者把这些都吃完,然后再排1000排直到我排到桌子的尽头。最后,我将从第一排重新开始。

起初,我认为可能有一种SQL语言构造,比如:"优化n行"或"FETCH first n",或者两者的组合。

我发现上面写着:

"您可以在SELECT语句的OPTIMIZE FOR n ROWS子句中指定一个大值n,以增加DB2服务器在每次网络传输中为不可滚动光标返回的DRDA查询块的数量。"

但现在我想,做我想要的事情可能会更复杂。

你们对创造这种行为有什么建议吗?

实现这一点的最佳方法是使用ROW_NUMBER OLAP函数,该函数将分配一个数字(在本例中按GEO_DATE排序),然后您可以使用该数字通过WHERE子句进行筛选:

SELECT * FROM (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY GEO_DATE) AS rn
        A.*
        FROM your_table A
)
--WHERE rn BETWEEN 1 AND 1000
WHERE rn BETWEEN 1001 AND 2000

最新更新