我有这个大型的交易数据库,我正试图从中提取数据。基本上,头表中的一个字段中有一个'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。
当我有十万行时,这似乎在亚秒级运行,但是在运行数百万行时需要几分钟......提前感谢任何帮助......