Rownum或Fetch / offset非常适合选择和处理数百万条记录

时间:2018-09-16 13:25:39

标签: sql oracle oracle12c

我想从oracle读取数百万条记录,并通过Java转移到另一个表。由于某些原因,我们正在使用Java流程。

我想问一下从表中选择记录的最佳方法,例如一次选择1000条记录。.rownum是好的还是在12c中获取/偏移?

例如,如果表有10000条记录,我可能会使用以下查询。

select *
from table
first 500 rows only  -- first time

select *
from table
offset 500 next 500 rows only

...第二次(这是oracle再次获取1000条记录并将500行发送到Resultset ..)

select *
from table
offset 1000 next 500 rows only

...。这次是oracle再次获取1500条记录并将500行发送到resulset ...

...等等

所以我不确定最好的方法是Rownum一次选择500条记录还是偏移/获取方法...需要建议。

1 个答案:

答案 0 :(得分:0)

您想从数据库#1的表中抽出数百万行,通过与Java应用程序的较低带宽连接将它们拉出,以便对它们进行按摩,然后想回头并推动相同的行建立相同的连接,将其粘贴到数据库2中-您能理解为什么这可能不是一个好选择吗? :-)

更好-在数据库#1中建立一个临时表,然后在填充临时表后,使用Oracle到Oracle数据库连接将数据从数据库#1推入数据库#2。

类似的东西:

Database #1
  CREATE TABLE TEMP_TABLE AS
    SELECT FIELD1,
           FIELD2,
           SUM(FIELD3)  -- or whatever
      FROM TABLE1
      WHERE WHATEVER = SOMETHING_ELSE
      GROUP BY FIELD1,
               FIELD2

  Run whatever PL/SQL procedures, etc, are needed to massage your data and make it 
  pretty.

Database #2
  CREATE TABLE PRETTY_BRAND_NEW_TABLE AS
    SELECT *
      FROM TEMP_TABLE@db1;

根据我的经验,这是您最好的选择。 YMMV。

好运。