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

时间:2013-08-26 20:19:51

标签: sql database events db2 simulation

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

超过百万(s)行坐标可用,我想我需要一次检索1000行,因为我不想“淹没”我的EPN。我的(现实生活)数据源的性质表现为随着汽车沿着路线行进,地理位置随着时间的推移而进入。所以我想通过静态数据集按照最新最新的顺序获取最早的地理数据和进程。这至少会给我“按时间顺序”的顺序。

计划是在Rabbit队列上放置1000行,并允许消费者吃掉所有这些,然后再获取1000行,直到我到达表的末尾。最后,我将重新开始第一行。

起初我认为可能存在一种SQL语言结构,例如:“OPTIMIZE FOR n ROWS”或“FETCH FIRST n” - 或两者的某种组合。

我发现this说:

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

但现在我认为可能会有更多的复杂性来达到我想要的目的。

你们有没有关于创造这种行为的建议?

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使用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