Programming/DB (16) 썸네일형 리스트형 Oracle 대용량 데이터 페이징 처리 방식 비교 ( ROW_NUMBER VS OFFSET-FETCH VS KEYSET(SEEK) ) Oracle 환경에서 1,000만 건 이상의 대용량 데이터를 다루면서 페이징을 구현해야 할 경우, 적절한 페이징 방식의 선택은 성능과 안정성에 직접적인 영향을 미친다. 이번에 받은 작업은 대용량 엑셀 다운로드 기능을 구현해야하는데 기존 프로젝트에서 쓰는 페이징 기법은 뒤로 갈 수록 느리다는 단점이 존재하였다. 직접 3가지 유형을 써보고 제일 빠르게 개선된 방식을 기록해두겠다. 대표적인 페이징 방식은 다음 세 가지가 있으며, 각각의 작동 방식, 장단점, 인덱스 및 정렬 순서 유지 여부, 대용량 처리 시 문제점을 함께 비교하여 정리한다. 1. ROWNUM / ROW_NUMBER 기반 페이징Oracle 8i 이상에서 사용 가능한 방식으로, 전체 데이터를 정렬한 후 ROWNUM 또는 ROW_NUMBER()를 부.. ROWNUM vs ROW_NUMBER() — 차이점 및 상세 비교 정리 1. 개념 비교: 두 함수의 근본적인 차이 항목 ROWNUM ROW_NUMBER() 순번 부여 시점SELECT 이후, ORDER BY 이전ORDER BY 이후에 윈도우 함수로 번호 부여정렬 반영 여부반영되지 않음원하는 정렬 기준 반영 가능고유성보장되지 않음고유하게 1부터 순번 부여페이징 용이성서브쿼리 필요직관적이고 쉬움사용 가능 DBOracle 한정SQL 표준을 지원하는 대부분의 DB 2. ROWNUM: 정렬 전 순번 부여의 한계잘못된 ROWNUM 사용 예SELECT employee_id, name, salaryFROM employeesWHERE ROWNUM 문제점: ROWNUM은 정렬 이전에 순번이 부여되므로, 원하는 정렬 기준이 반영되지 않은 채 임의의 3명이 추출됨 잘못된 결과 예시 (ROWNU.. Oracle PL/SQL 프로시저 작성법: 기본 개념과 실습 예제 프로시저란?프로시저(Procedure)는 특정 작업을 수행하기 위해 미리 정의해두고, 필요할 때마다 호출하여 실행할 수 있는 서브 프로그램입니다. 데이터베이스에서 자주 사용되는 작업들을 자동화하고, 반복적인 코드 작성을 방지할 수 있어 효율적인 관리가 가능합니다. 프로시저의 주요 특징입력 파라미터와 출력 파라미터를 사용하여 외부 데이터를 받아서 처리합니다.반복적인 작업을 함수처럼 자동화할 수 있습니다.여러 SQL 문장을 하나의 실행 단위로 묶을 수 있어 코드 유지보수성이 좋아집니다.이번 포스팅에서는 Oracle PL/SQL에서 프로시저를 작성하는 방법과, 이를 활용한 실습 예제를 살펴보겠습니다. 1. 기본적인 프로시저 작성법프로시저는 CREATE PROCEDURE 구문을 사용하여 생성합니다. 기본적인 .. Oracle MERGE 성능 이슈 및 해결 사례 Oracle 환경에서 대용량 MERGE 문을 실행할 때, 성능 저하 및 Snapshot too old 오류가 발생하는 사례는 종종 존재한다. 본 글에서는 실무 중 경험한 실제 사례를 바탕으로, 문제 상황 분석과 해결 방안을 기술하며, MERGE 시 주의해야 할 뷰 사용 패턴에 대해서도 정리한다.문제 상황운영 배치에서 아래와 같은 형태의 MERGE 문을 사용 중이었다.MERGE INTO AUSING ( SELECT ID, ID2, COUNT(*) AS CNT FROM B GROUP BY ID, ID2) BON (A.ID = B.ID AND A.ID2 = B.ID2)WHEN MATCHED THEN UPDATE SET A.CNT = B.CNTWHERE A.DATE = TO_DATE('2025-04-17.. SQL에서 IN, NOT IN vs EXISTS, NOT EXISTS 차이 — 그리고 NULL에 대한 함정 SQL에서 서브쿼리를 사용할 때 NOT IN과 NOT EXISTS는 자주 혼용되지만, 두 연산자는 내부적으로 전혀 다른 방식으로 작동한다. 특히 서브쿼리 결과에 NULL이 포함될 경우, 이 차이는 실질적인 결과의 차이로 이어지며, 예상치 못한 버그를 유발할 수 있다.본 문서에서는 NOT IN과 NOT EXISTS의 개념적 차이뿐 아니라 IN, EXISTS와의 비교, 그리고 NULL이 포함된 경우의 동작 방식까지 예제를 통해 알아보자.1. IN vs EXISTS, NOT IN vs NOT EXISTSININ은 서브쿼리 결과 또는 값 리스트에 포함되는지 여부를 비교한다. 리스트형 비교로 이해할 수 있다.SELECT * FROM employees WHERE department_id IN ( SELECT .. Oracle DB에서 Redo 로그, Undo, 아카이브 로그의 개념 정리 Oracle Database는 안정성과 일관성을 보장하기 위한 다양한 메커니즘을 제공한다. 그 중에서도 Redo 로그(Redo Log), Undo, 아카이브 로그(Archive Log)는 트랜잭션 복구, 장애 대응, 데이터 무결성 확보의 핵심 구성 요소다. 이 글에서는 각각의 역할과 작동 방식, 그리고 상호 관계에 대해 알아보자.1. Redo 로그 (Redo Log)정의Redo 로그는 데이터베이스에 수행된 모든 변경 작업의 이력을 기록하는 로그 파일이다. 즉, 데이터 블록에 어떤 변경이 발생했는지를 기록하여, 장애 발생 시 이를 기반으로 복구할 수 있도록 한다.특징LGWR(Log Writer) 프로세스가 변경 정보를 디스크에 기록커밋 여부와 무관하게 변경이 발생하면 Redo 로그에 먼저 기록됨SGA의 R.. RDB에서 페이징 쿼리의 중요성과 LIMIT, OFFSET 방식의 장단점 대용량 데이터를 처리할 때, 페이징(Paging)은 데이터 전달 효율성과 사용자 경험 개선을 위한 필수 기능입니다. 이 글에서는 RDB 환경에서 많이 쓰이는 LIMIT, OFFSET 기반 페이징의 작동 방식과 함께, 실제 상황에 적용할 수 있는 예제를 통해 장단점을 구체적으로 살펴보겠습니다.1. 페이징 쿼리란?페이징은 데이터를 일정 단위로 분할하여 조회하는 기법입니다. 대부분의 UI는 한 화면에 모든 데이터를 출력하지 않고, 페이지 또는 무한 스크롤 방식으로 일부만 보여줍니다.예를 들어 게시글 목록을 보여줄 때 다음과 같은 SQL을 사용할 수 있습니다:SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 20;최신 게시글을 기준으로 3번째 페이지(1.. 오라클 힌트(Oracle Hint) 정리 – 자주 사용하는 힌트와 최적화 전략 오라클 데이터베이스에서 SQL 실행 계획을 제어하는 방법 중 하나가 바로 힌트(Hint)입니다. 옵티마이저(Optimizer)는 자동으로 최적의 실행 계획을 선택하지만, 때때로 예상과 다른 실행 계획이 선택될 수도 있습니다. 이때, 힌트를 사용하면 개발자가 원하는 방식으로 실행 계획을 유도할 수 있습니다.이번 포스팅에서는 오라클에서 가장 많이 사용되는 힌트들을 정리하고, 각각의 동작 방식과 활용 예제를 소개하겠습니다.1. 오라클 힌트란?힌트(Hint)는 SQL 문 내에서 /*+ HINT_NAME */ 형식으로 작성되며, 옵티마이저가 특정 실행 계획을 선택하도록 유도하는 역할을 합니다. 힌트 기본 사용법:SELECT /*+ HINT_NAME */ 컬럼명 FROM 테이블명 WHERE 조건;/*+ */ 안에 .. 이전 1 2 다음