调整Oracle SQL查询

时间:2013-11-03 18:02:26

标签: sql oracle

我有这个大型的交易数据库,我正试图从中提取数据。基本上,头表中的一个字段中有一个'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”个记录并返回,但是看起来甲骨文正在扫描整个表格?

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

我有CUSTOMER_IDENTIFIER&amp;的索引SUBTABLE上的SOURCE_ID和HEADER上的BATCH / STATUS。

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

0 个答案:

没有答案