Oracle Explain Plan Operation

2024. 8. 2. 15:35·개발/ORACLE
728x90
반응형

2024.08.02 - [개발/ORACLE] - Oracle 튜닝 - 실행 계획

 

Oracle 튜닝 - 실행 계획

2024.05.02 - [개발/ORACLE] - Oracle 에서 explain plan 쿼리 계획 Oracle 에서 explain plan 쿼리 계획Mysql에서 쿼리 튜닝을 위해 혹은 인덱스를 걸기 위해 자주 사용했던 explain.Oracle에서는 문법이 다른데 어떻게

joolog.tistory.com

 

정렬 및 중복 제거

  • SORT ORDER BY
    • ORDER BY 구문에 의해 결과 집합을 정렬하는 단계.
    • 쿼리의 결과를 사용자 지정 순서대로 정렬한다.
    • 정렬 작업은 대개 메모리에서 수행되지만, 메모리가 부족할 경우 디스크를 사용한다.
SELECT name 
FROM employees 
ORDER BY salary DESC;
  • SORT UNIQUE
    • 선택된 결과 집합에서 중복된 레코드를 제거하는 작업을 수행.
    • UNION 연산자나 DISTINCT 연산자와 같이 중복을 제거해야 할 때 발생.
    • 정렬과 중복 제거가 필요할 때 사용
SELECT DISTINCT department_id 
FROM employees;

 

해시 기반 오퍼레이션

  • HASH GROUP BY
    • GROUP BY 구문에 의해 결과를 그룹화할 때 사용하는 방식.
    • 해시 함수를 사용하여 각 행을 해시 테이블에 매핑하여 동일한 값의 그룹을 찾음.
    • 대량의 데이터를 효율적으로 그룹화하는 데 유용.
SELECT department_id, COUNT(*) 
FROM employees 
GROUP BY department_id;
  • HASH UNIQUE
    • 해시 함수를 사용하여 중복된 레코드를 제거하는 단계.
    • 대규모 데이터 세트에서 중복을 효과적으로 제거하는 데 유리.
SELECT DISTINCT name
FROM employees;

 

조인 연산

  • MERGE JOIN CARTESIAN
    • 두 테이블 간에 조인 키 없이 모든 가능한 조합을 생성하는 카테시안 조인이 발생할 때 나타남.
    • 보통 조인 조건이 없거나 최적화되지 않았을 때 발생하며, 성능상 좋지 않을 수 있다.
SELECT * 
FROM employees, departments;
  • NESTED LOOPS
    • 중첩 반복문 방식으로 조인을 수행하는 단계.
    • 한 테이블의 각 행에 대해 다른 테이블을 검색.
    • 작은 데이터 집합이나 효율적인 인덱스를 사용할 경우 성능이 좋다.
SELECT e.name, d.department_name 
FROM employees e 
	JOIN departments d 
    	ON e.department_id = d.department_id;

 

인덱스 관련 스캔

  • INDEX RANGE SCAN
    • 인덱스의 범위를 스캔하여 조건에 맞는 레코드를 찾는다.
    • 인덱스가 정렬되어 있기 때문에 범위 검색이 효과적.
SELECT * FROM employees 
WHERE salary BETWEEN 30000 AND 50000;
  • INDEX UNIQUE SCAN
    • 유니크 인덱스를 통해 단일 행을 검색하는 단계.
    • 유니크 인덱스는 항상 고유한 값을 가지므로 단일 값을 정확히 찾을 때 사용.
SELECT * FROM employees 
WHERE employee_id = 123;
  • TABLE ACCESS BY INDEX ROWID
    • 인덱스를 사용하여 찾은 ROWID로 테이블의 데이터를 직접 조회하는 단계.
    • 인덱스를 사용하여 테이블의 특정 행에 빠르게 접근할 수 있다.

 

버퍼 및 행 관련 오퍼레이션

  • BUFFER SORT
    • 데이터베이스 버퍼 캐시에 후보 행들을 정렬하는 작업.
    • 메모리에서 정렬을 수행하여 빠른 접근을 가능하게 한다.
SELECT * 
FROM employees 
ORDER BY hire_date;
  • FIRST ROW
    • 쿼리에서 첫 번째 행만을 읽어오고자 할 때 사용.
    • 보통 최대값이나 최솟값과 같은 특정 조건을 만족하는 단일 행을 찾는 경우에 발생.
SELECT * 
FROM employees 
ORDER BY salary DESC FETCH FIRST 1 ROW ONLY;

 

기타

  • INDEX RANGE SCAN (MIN/MAX)
    • 인덱스가 항상 정렬된 상태를 유지하는 것을 이용하여
      최솟값 또는 최댓값을 빠르게 추출하는 스캔 방식.
SELECT MIN(salary) 
FROM employees;
  • SORT AGGREGATE
    • 집계 함수 (SUM, AVG, COUNT 등)를 사용하여 전체 행의 합계 등을 구한 후 정렬하는 작업.
    • 보통 집계 결과를 정렬해야 할 때 사용.
SELECT department_id, SUM(salary) 
FROM employees 
GROUP BY department_id 
ORDER BY SUM(salary);
  • TABLE ACCESS FULL
    • 테이블의 모든 행을 읽는 풀 테이블 스캔.
    • 인덱스가 없거나 사용할 수 없는 경우에 주로 발생하며,
      대량의 데이터를 처리할 때 성능에 영향을 줄 수 있다.
SELECT * 
FROM employees;
  • WINDOW SORT PUSHED RANK
    • 윈도우 함수 (예: RANK, DENSE_RANK, ROW_NUMBER)를 사용하면서,
      계산 결과를 정렬된 상태로 유지하는 작업.
    • 윈도우 함수의 특성상 특정 정렬 기준에 따라 계산된 결과를 필요로 할 때 사용.
SELECT name, RANK() OVER (ORDER BY salary DESC) 
FROM employees;
728x90
반응형
저작자표시 (새창열림)

'개발 > ORACLE' 카테고리의 다른 글

Oracle 힌트절  (1) 2024.11.07
Oracle 인덱스  (0) 2024.08.16
Oracle 튜닝 - 실행 계획  (0) 2024.08.02
Oracle From 절에 2개 이상의 테이블 JOIN, (+)  (0) 2024.05.22
Oracle install 19c  (0) 2024.05.16
'개발/ORACLE' 카테고리의 다른 글
  • Oracle 힌트절
  • Oracle 인덱스
  • Oracle 튜닝 - 실행 계획
  • Oracle From 절에 2개 이상의 테이블 JOIN, (+)
joolog
joolog
  • joolog
    JOO
    joolog
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • 개발 (83)
        • JAVA (29)
        • PYTHON (9)
        • AWS (15)
        • DOCKER (2)
        • PERCONA (2)
        • ORACLE (14)
        • MYSQL (1)
        • 알고리즘 (0)
        • 기타 (11)
      • 툴 (5)
        • MARKDOWN (1)
        • GIT (1)
        • DOCKER (1)
        • PyCharm (2)
        • IntelliJ (0)
      • 일상 (35)
        • 맛집 (6)
        • 카페 (2)
        • 요리 (4)
        • 글씨 연습 (2)
        • 그저 일상 (7)
        • 내돈 내산 (11)
        • 홍보 (1)
      • 국내 여행 (1)
      • 해외 여행 (15)
        • 체코-오스트리아 (10)
        • 일본 (5)
      • 암 일지 (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리
    • 티스토리 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오닉스 리프3
    오스트리아
    체코
    저요오드식
    오블완
    히로시마
    티스토리챌린지
    재발
    오라클
    jdbc
    동위원소
    mysql
    글씨연습
    자바JDBC
    갑상선 암
    요양병원
    잘츠부르크
    성모샘쉼터
    Oracle
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
joolog
Oracle Explain Plan Operation
상단으로

티스토리툴바