Database 4

[Database] 인덱스 (클러스터드,넌클러스터드,구조,종류,생성)

1. 인덱스란? 책의 목차와 같이 원하는 데이터를 빠르게 찾을 수 있게 해주는 객체(Object) 이다. 목차가 없다면 원하는 정보를 찾기 위해 책의 첫 페이지부터 전체를 뒤져야 하지만 목차가 있다면 원하는 정보가 몇 페이지에 있는지 금방 찾을 수 있다. 이처럼 인덱스도 데이터를 찾을 때 전체를 다 뒤지기보다 목차를 통해 해당 데이터를 바로 찾을 수 있게끔 도와준다. 하지만, 인덱스를 사용한다고 해서 무조건 좋은 것은 아니다. 목차를 만들기 위해 책의 페이지가 필요하고, 책의 정보를 추가,수정,삭제하면 목차를 수정해야하는 리소스가 필요하듯 인덱스를 저장하기 위한 공간이 필요하고 데이터를 변경할때의 리소스가 필요하다. 또, 무분별하게 생성된 인덱스는 용량을 차지하고, 옵티마이저의 최적화를 낮추는 결과를 얻..

Database 2024.03.05

[Database] JOIN 기법의 종류 (Nested Loops Join, Merge Join, Hash Join)

조인에는 세 가지 기법이 존재한다. 1. 중첩 루프 조인 (Nested Loops Join) 2. 병합 조인 (Sort Merge Join) 3. 해시 조인 (Hash Join) 다양한 상황에서 최적의 성능을 내기 위해 적절한 JOIN 계획을 세워 동작을 수행한다. 일반적으로 옵티마이저가 계획을 세워 동작을 수행하지만, 항상 최적화된 계획만을 세우지는 않는다. 그런 경우, 수동적으로 JOIN 계획을 세워 넣어줘야하는 경우가 있다. 각각의 JOIN 계획이 어떻게 동작하며, 어떤 상황에 어떤 기법이 효과적인지 알아보자. 1. 중첩 루프 조인 (Nested Loops Join) NL Join 방식 조인하려는 두 개의 테이블 중 더 작은 테이블을 선행 테이블 (Outer Table) 이라 하고, 더 큰 테이블을..

Database 2024.02.22

[Database] 트랜잭션 격리 수준 (Transaction Isolation Level)

트랜잭션 격리 수준 (Transaction Isolation Level) 이란, 동시에 여러 트랜잭션이 처리될 때 트랜잭션끼리 서로 얼마나 고립(isolation) 되어 있는지를 나타낸다. 즉, 하나의 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정한다. 우선 Isolation Level 에 대해 알기 전에 알아야 할 개념이 있다. 바로 Consistent Read 이다. Consistent Read 란, 말그대로 "일관된 읽기" 로 생각하면 된다. SELECT 문 실행 시 동시에 다른 트랜잭션에서 데이터를 변경하더라도 Undo Log 에 변경 전의 데이터(snapshot) 를 생성하고, 해당 시점의 snapshot 을 가져와 동일한 결과를 반환하여 일관성을 보장하기 위한 ..

Database 2023.10.23

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

데이터베이스에서는 여러 사용자가 동시에 접근하여 데이터를 읽고, 변경할 수 있는 동시성이 중요하다. 또한, 동시성과 함께 데이터의 일관성이 보장되어야한다. 이 동시성을 제어하고 일관성을 보장해주는 방법 중 하나가 MVCC (Multi Version Concurrency Control) 다중 버전 동시성 제어이다. ■ 기존 Locking 방식의 문제점 Locking 방식의 경우, 쓰기 작업이 수행되는동안 해당 데이터를 읽거나 쓸 수 없어 동시성의 문제가 발생한다. MVCC 를 통해 Locking 의 문제점을 해결할 수 있다. ■ MVCC 의 특징 ㆍ MVCC 는 데이터베이스의 snapshot 을 이용하여 구현된다. ㆍ 사용자가 데이터를 변경하면 데이터를 바로 변경하는 것이 아니라 변경 전의 데이터(snap..

Database 2023.10.18