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

비트맵 인덱스(Bitmap Index)

비트맵 인덱스(Bitmap Index)

비트맵 인덱스(Bitmap Index)는 데이터베이스에서 인덱싱을 최적화하기 위해 사용하는 인덱스 기법 중 하나입니다. 비트맵 인덱스는 각 고유한 값에 대해 비트 배열(비트맵)을 생성하여 데이터를 효율적으로 검색할 수 있도록 합니다. 특히 값의 종류(카디널리티, Cardinality)가 적은 경우(예: 성별, 상태값, 부서 코드 등)에 매우 효과적입니다. (OLTP보단 OLAP에서 효과적) 1. 비트맵 인덱스의 동작 방식 비트맵 인덱스는 각 열(column)의 고유한 값(unique value)에 … Read more

버퍼 핀닝(Buffer Pinning)

버퍼 핀닝(Buffer Pinning)

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

함수 기반 인덱스 (Function-Based Index, FBI) in Oracle

함수 기반 인덱스 (Function-Based Index, FBI) in Oracle

Oracle에서 함수 기반 인덱스(FBI, Function-Based Index) 는 일반 인덱스가 적용되지 않는 경우에도 함수나 표현식 결과를 인덱스로 활용할 수 있도록 도와주는 강력한 기능입니다. 1. 함수 기반 인덱스(FBI)란? 조건절에서 인덱스 컬럼에 함수를 적용하면 일반적으론 Index Range Scan이 불가능합니다. 인덱스는 가공하지 않은 값을 기준으로 정렬해서 저장한 반면, 가공한 값으로 검색하게 되면 수직적 탐색을 통해 시작점과 끝 지점을 찾을 … Read more

Oracle Index 문제 (Fragmentation 등)

Oracle Index 문제 (Fragmentation 등)

인덱스(Index)는 데이터 검색 성능을 향상시키는 중요한 구조이지만, 시간이 지나면서 단편화(Fragmentation), 희소성(Sparse), 비대화(Bloat), 데이터 불균형(Skew) 등의 문제로 인해 성능이 저하될 수 있습니다.이 문서에서는 Index Fragmentation(인덱스 단편화) 를 비롯한 여러 인덱스 관련 문제를 정리하고, 원인과 해결 방법을 설명합니다. 1. Index Fragmentation (인덱스 단편화) (1) Index Fragmentation이란? (2) 발생 원인 ✅ DELETE 후 블록이 재사용되지 않음✅ UPDATE 시 … Read more

Oracle의 WITH 절 (Subquery Factoring)

Oracle의 WITH 절 (Subquery Factoring)

Oracle의 WITH 절은 서브쿼리 팩터링(Subquery Factoring) 기능을 제공하여 복잡한 쿼리를 단순화하고 성능을 최적화하는 데 사용됩니다.이 절을 사용하면 서브쿼리를 여러 번 재사용하거나, 임시 데이터셋을 저장하여 쿼리 실행 성능을 향상할 수 있습니다. 1. WITH 절 기본 문법 WITH 서브쿼리_이름 AS ( SELECT 컬럼1, 컬럼2 FROM 테이블 WHERE 조건)SELECT * FROM 서브쿼리_이름; 🔹 주요 특징 2. WITH 절을 … Read more

Oracle FreeList와 HWM(High Water Mark)

Oracle FreeList와 HWM(High Water Mark)

1. FreeList와 HWM 개념 Oracle 데이터베이스에서 테이블이나 인덱스에 데이터를 저장할 때, 공간 관리와 성능 최적화를 위해 FreeList와 HWM(High Water Mark)가 중요한 역할을 합니다. 개념 설명 FreeList 테이블이나 인덱스에서 새로운 데이터가 삽입될 수 있는 여유 공간(블록) 목록 HWM (High Water Mark) 테이블에서 한 번이라도 데이터가 기록된 가장 마지막 블록의 위치 2. FreeList (프리리스트) FreeList란? FreeList 관리 … Read more