오라클 PUSH_SUBQ 힌트

오라클 PUSH_SUBQ 힌트

PUSH_SUBQ 힌트는 스칼라 서브쿼리의 실행 시점을 앞당겨서 실행 성능을 최적화할 때 사용됩니다.즉, 스칼라 서브쿼리(Scalar Subquery) 내부의 프레디케이트(Predicate)를 메인 쿼리로 푸시(Push)하는 것을 강제하는 힌트입니다. ✅ 기본 사용법 SELECT e.empno, e.ename, (SELECT /*+ PUSH_SUBQ */ d.dname FROM dept d WHERE d.deptno = e.deptno) AS department_nameFROM emp eWHERE e.sal > 3000; 위 쿼리에서 PUSH_SUBQ 힌트를 사용하면, e.sal > … Read more

Oracle PUSH_PRED 힌트

Oracle PUSH_PRED 힌트

PUSH_PRED 힌트는 메인 쿼리의 WHERE 조건을 서브쿼리 내부로 밀어넣어 서브쿼리에 대한 프레디케이트 푸시다운(Predicate Pushdown) 을 강제하는 힌트입니다. 특정 상황에서는 실행 성능을 최적화할 수 있습니다. ✅ 기본 사용법 SELECT /*+ PUSH_PRED */ *FROM ( SELECT emp.*, dept.dname FROM emp JOIN dept ON emp.deptno = dept.deptno) subWHERE sub.sal > 3000; 위와 같은 구조에서 PUSH_PRED 힌트를 사용하면 sub.sal … Read more

Sort Merge Join (정렬 병합 조인)

Sort Merge Join (정렬 병합 조인)

Sort Merge Join(SM 조인, 정렬 병합 조인)은 두 개의 정렬된 테이블을 병합하여 조인하는 방식입니다.주로 등가 조인(=)뿐만 아니라 범위 조인(<, >, BETWEEN 등)에서도 사용될 수 있으며, 대용량 데이터 조인에 적합합니다. 1. Sort Merge Join 개념 Sort Merge Join은 두 개의 입력 테이블을 정렬(Sort)한 후, 정렬된 데이터를 병합(Merge)하여 조인을 수행합니다. 2. Sort Merge Join의 동작 방식 SM … Read more

NL 조인(Nested Loop Join)

NL 조인(Nested Loop Join)

Nested Loop Join(NL 조인, 중첩 루프 조인)은 두 개의 테이블을 조인할 때 가장 기본적인 방법으로,하나의 테이블(외부 테이블, Outer Table)의 각 행을 반복하며 다른 테이블(내부 테이블, Inner Table)과 비교하는 방식입니다. NL 조인은 인덱스가 있는 경우 효과적이며, 소규모 데이터셋에서 빠르게 실행될 수 있지만, 대용량 데이터에서는 성능이 저하될 수 있습니다. 1. NL 조인의 개념 NL 조인은 반복문(Looping)을 활용한 … Read more

해시 조인(Hash Join)

해시 조인(Hash Join)

해시 조인(Hash Join)은 데이터베이스에서 두 개의 테이블을 조인할 때 사용되는 조인 알고리즘 중 하나로, 특히 대용량 데이터셋을 다룰 때 성능이 뛰어난 방법입니다.일반적으로 등가 조인(=)에서 사용되며, 테이블 크기가 크거나 인덱스가 없을 때 효율적으로 동작합니다. 1. 해시 조인의 개념 해시 조인은 두 개의 테이블에서 조인 키 값을 기반으로 해시 테이블을 생성하여 조인하는 방식입니다.일반적으로 Nested Loop Join(중첩 루프 … Read more

SQL 윈도우 함수(Window Function)

SQL 윈도우 함수(Window Function)

SQL 윈도우 함수(Window Function) 는 데이터베이스에서 행(row) 단위로 연산을 수행하면서도, 기존 행(row)들을 그대로 유지하는 함수입니다.GROUP BY와 달리 개별 행을 제거하지 않고 그룹 내에서 연산을 수행할 수 있습니다. 🏗 1. 윈도우 함수의 특징 ✅ 기존 행을 유지하면서 그룹별 연산 수행 ✅ OVER() 절을 사용하여 그룹을 정의 ✅ 대표적인 활용 예시 📊 2. 윈도우 함수 vs 그룹 … Read more

계층형 쿼리(Hierarchical Query)

계층형 쿼리(Hierarchical Query)

1. 계층형 쿼리(Hierarchical Query)란? 계층형 쿼리(Hierarchical Query)는 부모-자식 관계(트리 구조)를 가진 데이터를 조회하는 SQL 기법입니다. 일반적인 SQL 쿼리는 평면적(Flat) 데이터를 조회하는 반면, 계층형 쿼리는 트리 구조(Tree Structure)를 탐색할 수 있습니다. 예제: 2. 기본 문법 SELECT [컬럼들]FROM 테이블START WITH [루트 조건]CONNECT BY [계층적 관계 정의][ORDER SIBLINGS BY 컬럼명]; 3. 예제 데이터 (EMPLOYEES 테이블) 테이블 구조 CREATE … Read more

SQL 그룹함수

SQL 그룹함수

SQL에서 GROUPING SETS, ROLLUP, CUBE와 같은 그룹핑 함수들은 집계 쿼리를 보다 유연하게 만들 수 있도록 도와줍니다. 각 기능의 개념과 예제를 설명하겠습니다. 1. GROUPING SETS GROUPING SETS는 여러 개의 GROUP BY 조건을 한 번에 처리할 수 있도록 도와줍니다. 개별적인 GROUP BY를 조합하여 원하는 그룹핑 조합만 선택적으로 사용할 수 있습니다. 예제 결과 예시 department job total_salary HR … Read more

Snapshot too old(ORA-01555) in Oracle

Snapshot too old(ORA-01555) in Oracle

Oracle “Snapshot too old” 오류와 해결 방법 📌 오류 개요 Oracle에서 “Snapshot too old” 오류는 UNDO 영역 부족으로 인해 발생하는 오류입니다.특히 긴 시간 실행되는 쿼리(대량 데이터 조회, 분석 쿼리 등)에서 많이 발생합니다. (쿼리가 오래 수행되는 동안 UNDO영역에 기존 수행중이던 쿼리에 대한 데이터가 삭제됨) 1. “Snapshot too old” 오류 원인 오라클은 트랜잭션의 일관성을 유지하기 위해 UNDO … Read more

버퍼 핀닝(Buffer Pinning)

버퍼 핀닝(Buffer Pinning)

버퍼 핀닝(Buffer Pinning)은 데이터베이스 시스템에서 특정 데이터 페이지를 버퍼 캐시에 고정하는 기술입니다. 즉, 버퍼 캐시에서 특정 페이지가 다른 페이지로 대체되지 않도록 보호하는 것입니다. 🔹 버퍼 핀닝의 개념 🔹 버퍼 핀닝이 필요한 경우 🔹 버퍼 핀 해제 (Unpinning) 🔹 버퍼 핀닝의 장점 ✅ 성능 향상: 자주 사용되는 데이터를 유지하여 디스크 I/O를 최소화.✅ 데이터 일관성 유지: 트랜잭션 … Read more