DB (26) 썸네일형 리스트형 [DB] 클러스터드 vs 넌클러스터드 인덱스 📌 클러스터드 인덱스 (Clustered Index)실제 데이터가 인덱스 순서대로 정렬되어 저장됩니다.즉, 인덱스 자체가 데이터입니다.한 테이블에 하나만 존재 가능 (정렬이 하나 기준이니까)✅ 장점범위 조회에 빠름 (BETWEEN, ORDER BY)접근 시 디스크 I/O가 줄어듦❌ 단점데이터 삽입/삭제 시 정렬 유지해야 하므로 성능 저하 가능한 테이블당 하나만 가능 📌 넌클러스터드 인덱스 (Non-Clustered Index)인덱스와 실제 데이터가 분리되어 있음인덱스에는 데이터의 포인터만 저장되어 있고, 필요한 값은 본문에서 추가로 읽음 (lookup)✅ 장점다양한 컬럼에 여러 개 생성 가능클러스터드 인덱스 외 다른 조건도 최적화 가능❌ 단점인덱스로 찾고 → 다시 테이블 접근 (lookup) 필요해서.. [DB] 옵티마이저 동작 방식 🤔 DB 옵티마이저란?DB 옵티마이저는 SQL 쿼리를 가장 효율적으로 실행할 실행 계획 (Execution Plan)을 선택하는 역할을 한다. 이걸 선택하는 방식에는 두 가지가 있다. 규칙 기반 옵티마이저 (Rule-Based Optimizer, RBO)데이터 통계 정보 를 고려하지 않고, 정해진 규칙(rule)을 기반으로 실행 계획을 선택합니다. 예시인덱스가 있으면 무조건 인덱스를 사용한다조인 순서는 항상 왼쪽부터 처리특징예측 가능하고 단순함데이터 양이 많아지면 비효율적인 계획이 나올 수 있다.실제 상황에 맞는 유연한 선택을 못한다. 비용 기반 옵티마이저 (Cost-Based Optimizer, CBO)각 실행 계획마다 예상 비용(cost)을 계산해서 가장 저렴한 걸 선택합니다.통계 정보 (행 수, .. [DB] 드라이빙, 드라이븐 테이블 🤔 드라이빙 테이블?먼저 읽기 시작하는 테이블이다.이 테이블의 결과를 기반으로, 다른 테이블(드라이븐 테이블)을 조건에 따라 탐색한다.루프의 바깥쪽 테이블 이라고 생각하면 된다.🤔 드라이븐 테이블?드라이빙 테이블에서 가져온 각 행을 기준으로 탐색되는 두 번째 테이블이다.루프의 안쪽 테이블 이다.드라이빙 테이블의 값을 이용해서 조인 조건을 만족하는 행을 찾는 대상이다.🤔 왜 중요할까?조인의 성능은 드라이빙 테이블의 선택 에 크게 영향을 받는다.👉 드라이빙 테이블이 작고 조건이 잘 걸리는 테이블일수록 효율적이다.예시: Orders가 수십만 개고 Customers가 수천 명일 때,SELECT *FROM Orders oJOIN Customers c ON o.customer_id = c.idWHERE c... [DB] 조인 전략 🔗 Join 전략DB에서 여러 테이블을 연결할 때 사용하는 방식이다.어떻게 두 테이블을 매칭하고 결과를 만들 것인지에 따라 전략이 나뉜다. 🔁 Nested Loop Join가장 기본적인 방식이다. 말 그대로 반복문 안에 반복문.한 테이블의 데이터를 하나씩 꺼내서, 다른 테이블을 전부 뒤져서 매칭한다.작은 테이블 + 인덱스가 있을 때 효과적느리다 (두 테이블 모두 클 경우 O(N²))예시SELECT *FROM Employees eJOIN Departments d ON e.dept_id = d.id;Employees의 각 직원마다 Departments 전체를 검색해서 일치하는 id를 찾음📊 Hash Join작은 테이블을 해시맵(키-값 쌍)처럼 메모리에 저장한 뒤, 큰 테이블에서 값을 하나씩 비교해시 테.. [DB] 데이터베이스에서 사용되는 다양한 키 🔑 1. 기본 키 (Primary Key)테이블에서 각 레코드를 고유하게 식별하는 데 사용된다.또한, 후보 키들 중에서 하나를 선택해서 지정한 유일한 키이다.CREATE TABLE employees ( id INT PRIMARY KEY, -- 기본 키 name VARCHAR(50), salary INT); ✅ 특징유일성: 기본 키의 값은 중복될 수 없음.널 값 불허: 기본 키는 널 값(NULL)을 가질 수 없음.기본 키가 설정된 컬럼은 자동으로 인덱스가 생성된다.2. 유니크 키 (Unique Key)기본 키와 유사하지만, 중복된 값은 허용하지 않지만 NULL 값은 허용된다.CREATE TABLE users ( user_id INT PRIMARY KEY, email VARCHA.. [DB] MySQL InnoDB의 인덱스 생성 전략 📌 1. 기본키 인덱스 (Primary Key Index)기본키(PK)가 설정된 컬럼에 자동으로 생성되는 인덱스이다.InnoDB에서는 기본키가 클러스터형 인덱스(Clustered Index)로 동작한다.데이터가 기본키 기준으로 물리적으로 정렬되며 저장된다.✅ 특징테이블당 하나의 기본키만 설정 가능하다.NULL을 허용하지 않으며, 중복된 값을 가질 수 없음.기본키 검색이 빠르며, 다른 인덱스에서 기본키를 사용해 데이터 검색을 수행함.🚀 예제CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100));위와 같이 id를 기본키로 설정하면, id를 기준으로 클러스터형 인덱스(Clustered Index)가 생성된다.📌 2. 클러스터형 인덱스.. [CS] 데드락 데드락(교착 상태)두 개 이상의 프로세스 혹은 쓰레드가 서로가 가진 리소스를 기다리는 상태 데드락을 만드는 네 가지 조건상호 배제(Mutual exclusion): 리소스를 공유해서 사용할 수 없다.점유와 대기(hold and wait): 프로세스가 이미 하나 이상의 리소스를 취득한 상태(hold)에서 다른 프로세스가 사용하고 있는 리소스를 추가로 기다린다(wait).비선점(No preemption): 리소스 반환은 오직 그 리소스를 취득한 프로세스만 할 수 있다.원형 대기(Circular wait): 프로세스들이 순환하는 형태로 서로의 리소스를 기다리는 상태운영체제(OS)의 데드락 해결 방법데드락 방지데드락 회피데드락 감지와 복구데드락 무시데드락 방지(Deadlock prevention)네 가지 조건 .. [DB] 병행 수행과 병행 제어 병행 수행과 병행 제어병행 수행데이터베이스 관리 시스템은 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러 개의 트랜잭션이 동시에 수행되는 병행 수행을 지원한다. 병행 수행은 실제로 여러 트랜잭션이 차례로 번갈아 수행되는 인터리빙 방식으로 진행된다. 그런데 병행 수행되는 트랜잭션들이 동시에 같은 데이터에 접근하여 변경 연산을 실행하려고 하면 예상치 못한 결과가 나타날 수 있다. 그러므로 병행 수행을 하더라도 각 트랜잭션이 다른 트랜잭션의 방해를 받지 않고 정확한 수행 결과를 얻을 수 있도록 제어해야 한다. 병행 제어여러 개의 트랜잭션이 병행 수행되면서 같은 데이터에 접근하여 연산을 실행하더라도, 문제가 발생하지 않고 정확한 수행 결과를 얻을 수 있도록 트랜잭션의 수행을 제어하는 것을 병행 제어 .. [DB] 트랜잭션 회복 기법 트랜잭션작업 하나를 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로, 데이터베이스에서 논리적인 작업의 단위가 된다.데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다. 트랜잭션의 상태활동 상태: 트랜잭션이 수행되기 시작한 상태부분 완료 상태: 활동 상태의 트랜잭션이 마지막 연산을 처리한 상태완료 상태: 부분 완료 상태의 트랜잭션이 commit 연산을 실행한 상태실패 상태: 활동 상태나 부분 완료 상태에서 여러 원인으로 인해 더는 정상적인 수행이 불가능한 트랜잭션 상태철회 상태: 실패 상태의 트랜잭션은 롤백 연산의 실행으로 철회 상태가 된다.트랜잭션이 완료 상태이거나 철회 상태가 되면 트랜잭션이 종료된 것으로 판단 활동 상태트랜잭션이 수행되기 시작하여 현재 수행 중인 상태활동.. [DB] Soft Delete VS Hard Delete Soft Delete데이터를 실제로 삭제하지 않고, 삭제된 것처럼 표시만 하는 방식보통 is_deleted와 같은 플래그를 추가해 이를 관리합니다.특징:데이터는 여전히 저장소에 남아 있음."삭제됨" 상태를 나타내는 플래그를 이용.데이터를 복구하거나 기록을 추적할 수 있음.장점복구 가능: 실수로 삭제한 데이터를 복구할 수 있음.이력 관리: 데이터의 삭제 여부를 기준으로 과거 기록 확인 가능.참조 데이터 보호: 외래 키 제약 조건을 위반하지 않고 삭제 처리 가능.단점스토리지 증가: 삭제된 데이터를 계속 저장하기 때문에 데이터베이스 크기가 커질 수 있음.복잡한 쿼리: "삭제되지 않은 데이터"를 조회하려면 조건을 추가해야 함 (WHERE is_deleted = false).성능 저하: 많은 "삭제된" 데이터를 .. 이전 1 2 3 다음