0

我有这个大型事务数据库,我正试图从中提取数据。基本上,标题表中的一个字段中有一个“0”,每次执行此存储过程时,我都想从标题中获取 n 行具有 0 的行,但只有那些符合某些条件的行,其中之一是连接表(当然是索引的)具有与我指定的常量匹配的值。

这是查询:

select /*+ FIRST_ROWS(1000)*/ T.ID        
    from HEADER T 
    JOIN (
          SELECT /*+ parallel(TC,4) FULL(TC) */ 
          tc.ID, tc.SOURCE_ID, tc.CUSTOMER_IDENTIFIER FROM
          SUBTABLE tc, (SELECT ID, MAX(IDENT_SEQUENCE_ID) as IDENT_SEQUENCE_ID FROM SUBTABLE
          WHERE SOURCE_ID = 9002 AND upper(trim(CUSTOMER_IDENTIFIER)) <> 'UNKNOWN'  GROUP BY ID) maxtc
          WHERE maxtc.ID = tc.ID AND
          maxtc.CUST_IDENT_SEQUENCE_ID = tc.CUST_IDENT_SEQUENCE_ID
        ) cust
        ON t.ID = cust.ID
        where T.batch=0 and T.status=6  and rownum <= SOME_NUMBER_HERE;

我希望“FIRST_ROWS”或 rownum 限制将使这基本上只是寻找第一个“SOME_NUMBER_HERE”记录数并返回,但似乎 Oracle 正在扫描整个表?

无论如何,在找到一定数量的匹配行之后,通过停止连接内的 select 语句来使其运行得更快?

我在 SUBTABLE 上有 CUSTOMER_IDENTIFIER 和 SOURCE_ID 的索引,在 HEADER 上有 BATCH/STATUS 的索引。

当我有十万行时,这似乎运行亚秒,但在数百万行上运行时需要几分钟......提前感谢您的帮助......

4

0 回答 0