오라클 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

계층형 쿼리(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

병렬 INSERT in Oracle

병렬 INSERT in Oracle

Oracle에서는 병렬 INSERT를 통해 데이터를 빠르게 삽입할 수 있습니다. 일반적인 INSERT 작업은 단일 세션에서 수행되지만, 병렬 처리(Parallel Processing)를 이용하면 여러 개의 프로세스가 동시에 데이터를 삽입하여 성능을 향상시킬 수 있습니다. 1. 병렬 INSERT 개념 병렬 INSERT는 여러 개의 병렬 프로세스를 활용하여 데이터를 삽입하는 기법입니다. Oracle은 데이터를 블록 단위로 나누고 여러 개의 프로세스가 동시에 데이터를 쓰도록 하여 … Read more

NO_UNNEST 힌트 in Oracle

NO_UNNEST 힌트 in Oracle

1. NO_UNNEST 힌트란? NO_UNNEST 힌트는 서브쿼리(Subquery)의 변환(UNNESTING) 최적화를 방지하는 데 사용됩니다. NEST의 사전적 의미는 무언가를 “포개다, 겹치다”의 의미로 중첩을 의미합니다. 서브쿼리에 unnest 힌트를 사용하게 되면, 서브쿼리를 펴서 메인쿼리와 조인으로 풀어내겠다는 의미로 보시면 됩니다. no_unnest는 중첩을 풀지 않고 필터조건으로 풀어내는 것으로 보면 됩니다. ※ /*+ unnest */ : 서브쿼리를 unnesting 함으로써 JOIN 방식으로 최적화하도록 유도 /*+ … Read more

Write Ahead Logging (WAL)

Write Ahead Logging (WAL)

Oracle의 Write-Ahead Logging (WAL) Oracle에서는 Write-Ahead Logging (WAL) 개념이 Redo Log와 Undo Log를 통해 구현됩니다. WAL은 데이터를 디스크의 데이터 파일에 기록하기 전에, 먼저 로그(redo log)에 기록하는 기법으로, 장애 발생 시 데이터 복구 및 트랜잭션의 무결성을 보장하는 핵심 기술입니다. Fast Commit시 사용되는 기법이기도 합니다. 1. Write-Ahead Logging (WAL)의 개념 2. Oracle의 WAL 구조 Oracle의 WAL은 Redo … Read more

오라클 Index Unique Scan

오라클 Index Unique Scan

Index Unique Scan은 고유한(UNIQUE) 인덱스나 Primary Key(PK) 인덱스를 이용하여 단 하나의 값을 빠르게 조회할 때 사용되는 인덱스 스캔 방식입니다. 참고로 오라클에서 Primary Key(PK) 인덱스는 테이블 생성 시 자동으로 만들어집니다. 1️⃣ 특징 ✔ 항상 하나의 결과(또는 존재하지 않음)를 반환✔ 고유한 값(UNIQUE, PRIMARY KEY) 조건일 때만 작동✔ 가장 빠른 인덱스 검색 방법 중 하나✔ B-Tree 인덱스에서 루트 … Read more

MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)

MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)

다중 버전 동시성 제어(MVCC, Multi-Version Concurrency Control)는 데이터베이스 시스템에서 동시성을 관리하는 기법으로, 트랜잭션이 동시에 실행될 때 읽기 작업과 쓰기 작업이 충돌하지 않도록 여러 개의 데이터 버전을 유지하는 방식입니다. 🔹 MVCC의 주요 개념 🔹 MVCC의 장점과 단점 ✅ 장점 ❌ 단점 🔹 MVCC를 사용하는 대표적인 DBMS MVCC는 트랜잭션이 많은 환경에서 높은 동시성과 성능을 제공하는 중요한 기법이며, … Read more