ROWNUM - COUNT STOPKEY

2024. 4. 19. 15:44DBMS/PERFORMANCE

반응형

 

SELECT /* gather_plan_statistics */ * 
FROM (
    SELECT rownum AS no, last_name, salary 
    FROM (
        SELECT last_name, salary 
        FROM hr.employees 
        ORDER BY salary DESC
    ) 
    WHERE rownum <= 10
)
WHERE no >= 1;


- COUNT STOPKEY 연산은 결과 집합의 일부 레코드만 계산하여 성능을 향상시키는 방식이다. 상위 10개의 레코드만 필요하므로 처음 10개의 레코드만 검색하고 이를 반환하여 전체 결과 집합을 검색하는 것보다 효율적일 수 있다.

- SORT ORDER BY STOPKEY 는 ORDER BY 절이 포함되어 있으며, 상위 10개의 레코드만 검색하여 정렬하여 전체 결과 집합을 정렬하는 것보다 효율적일 수 있다.

 

 

 

 

악성 코드

SELECT /* gather_plan_statistics */ * 
FROM (
    SELECT rownum AS no, last_name, salary 
    FROM (
        SELECT last_name, salary 
        FROM hr.employees 
        ORDER BY salary DESC
    ) 
)
WHERE no <= 10 AND no >= 1;

 

 

COUNT 연산은 전체 결과 집합의 레코드 수를 계산한다. 이 경우에는 전체 결과 집합의 레코드 수가 107개이며, 그 중에서 상위 10개의 레코드를 선택하여 반환한다.

 

 

 

 

 

결론적으로, 두 번째 실행 계획은 성능을 향상시키기 위해 COUNT와 ORDER BY 연산을 최적화한 것이다.

 
반응형

'DBMS > PERFORMANCE' 카테고리의 다른 글

INDEX TUNNING  (0) 2024.07.08
데이터 정합성 for update  (0) 2024.07.03
B-tree index structure  (0) 2024.07.03
두 테이블 모두가 조인 컬럼을 기준으로 파티셔닝되지 않은 경우  (0) 2024.04.18
Sort Merge JOIN  (0) 2024.01.28