질문은, 서브 쿼리에서 반환 ORDERED 행 의 수를 제한하는 방법이 선택의 이러한 종류에 중대한보기를 만들 수 있을까?
select * from (
select a.*, rownum r
from (
select *
from your_table
where ...
order by ...
) a
where rownum <= :upperBound
)
where r >= :lowerBound;
내가 일반적으로 내부 쿼리에서 정렬 인덱스 컬럼을 사용하고, 사용 :
다음
내가 일반적으로 상위 n 형 쿼리 (매김이 경우 쿼리)를 사용하는 것입니다 rownum은 오라클이 카운트 (스톱 키) 최적화를 사용할 수 있음을 의미합니다. 그러므로 반드시 전체 테이블 스캔을 할 필요는 없습니다 :
create table t3 as select * from all_objects;
alter table t3 add constraint t_pk primary key(object_id);
analyze table t3 compute statistics;
delete from plan_table;
commit;
explain plan for
select * from (
select a.*, rownum r
from (
select object_id, object_name
from t3
order by object_id
) a
where rownum <= 2000
)
where r >= 1;
select operation, options, object_name, id, parent_id, position, cost, cardinality, other_tag, optimizer
from plan_table
order by id;
오라클은 t_pk를 사용하여 전체 인덱스 스캔을 수행합니다. 또한 stopkey 옵션 사용에 유의하십시오.
내 대답을 설명하는 희망 :
왜이 질문에 대한 적절한 대답이라고 생각하는지 설명해야합니다. – Allan