데이터베이스 인덱싱은 데이터베이스 테이블에서 데이터를 빠르게 검색하기 위해 사용되는 기술입니다. 인덱스는 책의 목차와 비슷한 역할을 하며, 데이터베이스 내의 특정 열(Column)에 대한 검색 속도를 향상시키기 위해 사용됩니다.
인덱스는 테이블의 한 열이나 여러 열에 대해 추가적인 데이터 구조(B-Tree, Hash 등)를 생성하며, 이 구조는 데이터가 저장된 위치에 대한 포인터 역할을 합니다. 인덱스가 있으면 검색 시 테이블의 모든 데이터를 탐색하는 대신, 인덱스를 통해 빠르게 원하는 데이터를 찾을 수 있습니다.
클러스터드 인덱스(Clustered Index):
넌클러스터드 인덱스(Non-Clustered Index):
인덱스의 장점:
인덱스의 단점:
단일 열 인덱스:
CREATE INDEX idx_employee_lastname ON employees(last_name);
employees 테이블의 last_name 열에 대한 인덱스를 생성하여, last_name을 기준으로 하는 검색을 빠르게 합니다.다중 열 인덱스 (Composite Index):
CREATE INDEX idx_employee_name ON employees(last_name, first_name);
last_name과 first_name을 조합하여 인덱스를 생성하며, 두 열을 동시에 사용하는 검색을 최적화합니다.데이터베이스 샤딩은 데이터베이스를 여러 개의 작은 단위(샤드, Shard)로 나누어 저장하는 기술입니다. 샤딩은 특히 대규모 데이터베이스 시스템에서 데이터 처리 성능을 향상시키고, 확장성을 제공하기 위해 사용됩니다. 각 샤드는 동일한 스키마를 가지지만, 서로 다른 데이터를 저장합니다.
샤딩의 목적은 데이터를 물리적으로 분할하여 한 서버에 과도한 부하가 걸리지 않도록 하고, 데이터베이스 시스템의 성능과 확장성을 개선하는 것입니다.
수평 샤딩 (Horizontal Sharding):
수직 샤딩 (Vertical Sharding):
샤드 키 (Shard Key):
샤딩의 장점:
샤딩의 단점:
수평 샤딩:
shard1에 저장하고, 1001~2000인 데이터를 shard2에 저장합니다.-- shard1: 고객 ID 1~1000
INSERT INTO shard1.customers (customer_id, name) VALUES (1, 'John Doe');
-- shard2: 고객 ID 1001~2000
INSERT INTO shard2.customers (customer_id, name) VALUES (1001, 'Jane Doe');
수직 샤딩:
-- shard1: 고객 정보
CREATE TABLE shard1.customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
-- shard2: 주문 정보
CREATE TABLE shard2.orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
이 두 가지 개념은 대규모 시스템 설계에서 중요한 역할을 하며, 적절한 설계와 구현은 시스템의 성능과 유지보수성을 크게 향상시킬 수 있습니다.