Statement와 PreparedStatement
·
Databases
StatementStatement stmt = connection.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE id = 1"); Statement는 JDBC에서 제공하는 가장 기본적인 쿼리 실행 방식이다. 이는 데이터베이스에 SQL 문을 전달하고 실행하는 단순한 인터페이스를 제공한다. Statement를 사용할 때마다 데이터베이스는 SQL 문을 파싱하고, 컴파일하여 실행 계획을 생성한다. 이러한 과정은 매 실행마다 반복되며, 불필요한 작업이다. Statement의 실행 과정은 크게 네 단계로 나눌 수 있다.SQL 문장이 데이터베이스 서버로 전송데이터베이스 서버는 받은 SQL 문장을 파싱하여 문법적 오류를 검사실..
Clustered Index, Non Clustered Index
·
Databases
데이터베이스에서 인덱스는 데이터를 빠르게 찾기 위한 핵심 기능이다. 책의 목차나 색인과 같은 역할을 하며, 원하는 데이터를 빠르게 찾을 수 있게 도와준다. 인덱스는 크게 클러스터드 인덱스와 넌클러스터드 인덱스로 나뉜다. 클러스터드 인덱스CREATE TABLE users ( id INT PRIMARY KEY, -- 자동으로 클러스터드 인덱스 name VARCHAR(50)); 클러스터드 인덱스는 데이터를 물리적으로 정렬하여 저장하는 방식이다. 여기서 '클러스터드(Clustered)'란 '군집화된', '모여있는'이라는 의미로, 실제 데이터가 인덱스 순서대로 물리적으로 함께 모여있다는 것을 뜻한다. 이는 마치 도서관의 책들이 도서번호 순서대로 실제로 정렬되어 있는 것과 같은 개념이다. 실제 디스크에..
트랜잭션 격리수준
·
Databases
데이터베이스에서 트랜잭션 격리 수준은 동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 중요한 설정이다. 격리 수준에는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE가 있다.  READ UNCOMMITTED 가장 낮은 격리 수준으로, 다른 트랜잭션이 커밋하지 않은 데이터도 읽을 수 있다. 이로 인해 Dirty Read가 발생할 수 있으며, 데이터 정합성에 심각한 문제가 생길 수 있다. 하지만 동시처리 성능은 가장 좋다. set transaction isolation level READ COMMITTED;create table read_uncommit(a..
데이터베이스 동시성 제어: MVCC
·
Databases
MVCCMVCC는 데이터베이스에서 동시성을 제어하는 주요 방식 중 하나로, 데이터의 여러 버전을 유지하면서 읽기 작업과 쓰기 작업이 서로를 차단하지 않도록 하는 기법이다. 전통적인 잠금 기반의 동시성 제어와 달리, MVCC는 각 트랜잭션이 데이터의 특정 시점 스냅샷을 보게 함으로써 더 높은 동시성을 제공한다. 즉, MVCC의 핵심 원리는 데이터를 수정할 때 새로운 버전을 생성하는 것이다.   Redo데이터베이스에서 발생하는 변경 작업을 기록하는데 사용변경 작업이 수행될 때마다 Redo 로그 버퍼에 기록되고, 일정 크기나 시간에 도달하면 디스크에 영구 저장데이터 복구시에 사용Undo트랜잭션의 롤백을 지원하고, 일관성 및 격리 수준을 유지하기 위해 사용된다.트랜잭션 실행 도중 변경된 데이터는 Undo 세그먼..
데이터베이스 동시성 제어: 2PL
·
Databases
Two-Phase Locking (2PL)  2PL은 트랜잭션의 Lock 연산을 두 단계로 나누어 관리하는 프로토콜이다. 첫 번째 단계인 Growing Phase(확장)에서는 Lock을 획득만 할 수 있고 해제는 불가능하며, 두 번째 단계인 Shrinking Phase(수축)에서는 Lock을 해제만 할 수 있고 획득은 불가능하다.  이러한 2PL은 직렬성(Serializability)을 보장하는 대표적인 동시성 제어 기법이다.  A 계좌에서 B 계좌로 100만원을 이체하는 상황을 가정 스키마CREATE TABLE accounts ( account_id VARCHAR(10) PRIMARY KEY, account_holder VARCHAR(50) NOT NULL, balance DECIMAL..
수직적 탐색 수평적 탐색
·
Databases
데이터베이스 시스템에서 인덱스 탐색은 수직적(Vertical) 탐색과 수평적(Horizontal) 탐색이라는 두 가지 핵심 메커니즘을 기반으로 동작한다. 이 두 방식은 주로 B+tree 구조에서 상호 보완적으로 작용하여 효율적인 데이터 접근을 가능하게 한다.  수직적 탐색 수직적 탐색은 루트 노드에서 시작하여 브랜치 노드를 거쳐 리프 노드까지 하향식으로 진행되며, 각 계층에서의 키 값 비교를 통해 탐색 범위를 점진적으로 축소시킨다. 이때 상위 노드들의 키 값은 순수한 라우팅 용도로만 사용되며, 실제 데이터와의 직접적인 연관성은 없다. 수평적 탐색 수평적 탐색은 B+tree의 리프 레벨에서 발생하는 선형적 탐색 방식이다. 리프 노드들은 양방향 연결 리스트 형태로 구성되어 있어, 순차적인 데이터 접근이 가능..
NL 조인
·
Databases
NL(Nested Loop) 조인은 중첩 반복 조인이라고도 하며, 데이터베이스에서 가장 기본적인 조인 알고리즘 방식이다. 두 개의 테이블을 조인할 때 한 테이블의 모든 행을 기준으로 다른 테이블의 행을 순차적으로 검색하면서 조인하는 방식이다.  즉, for문과 비슷하게 동작한다고 생각하면 된다. 아래와 같은 구조의 이중포문을 보았을 때, i=0 일때 j는 0,1,2,3,4 와 같은 식으로 5번 반복한다. 바깥  for문 한번에 안쪽 포문 5번 반복하는 것이다.for(i =0 i NL조인도 이와 동일하다. 아래의 쿼리에서 선행 테이블인 사원 테이블이 바깥  for문, 고객 테이블이 안쪽 for문이라고 생각하면 된다.SELECT E.사원명, C.고객명, C.전화번호 FROM 사원 E, -- OUTER (드..
DELETE vs TRUNCATE
·
Databases
기본 문법 및 특징 DELETEDELETE FROM table_name [WHERE condition]; 주요 특징:행(Row) 단위 삭제WHERE 절을 통한 조건부 삭제 가능트랜잭션 내에서 롤백 가능각 행 삭제마다 트랜잭션 로그 기록TRUNCATETRUNCATE TABLE table_name; 주요 특징:테이블 전체 데이터 일괄 삭제WHERE 절 사용 불가자동 커밋으로 롤백 불가단일 트랜잭션 로그 기록DELETE는 데이터를 행 단위로 개별적으로 삭제하며, 각 삭제 작업마다 트랜잭션 로그를 기록한다. WHERE 절을 사용하여 특정 조건의 데이터만 선택적으로 삭제할 수 있고, 트랜잭션 내에서 실행되므로 필요한 경우 롤백이 가능하다. 반면 TRUNCATE는 테이블의 데이터를 한 번에 일괄 삭제하는 방식으로,..