DB
-
[Mysql] 조인 테이블 조회시 드라이빙? 드리븐? 테이블 설명 및 STRAIGHT_JOIN 힌DB/Mysql 2025. 4. 22. 16:26
드라이빙 테이블과 드리븐 테이블이란?SQL에서 여러 테이블을 조인할 때, 옵티마이저는 효율적인 조인을 위해 조인의 시작 테이블과 그 이후 조인될 테이블을 구분합니다. 이를 각각 드라이빙(Driving) 테이블과 드리븐(Driven) 테이블이라고 합니다.🚗 드라이빙 테이블 (Driving Table) 조인의 시작점이 되는 테이블입니다. 옵티마이저가 가장 먼저 액세스합니다. WHERE 조건의 선택도(Selectivity)가 높은 테이블일수록 유리합니다.🧭 드리븐 테이블 (Driven Table) 드라이빙 테이블의 결과에 따라 조인되는 테이블입니다. 보통 루프 안에서 여러 번 조회됩니다. 인덱스를 잘 걸어야 성능 저하를 방지할 수 있습니다.예시 쿼리에 적용해 보기SELECT * FROM C JO..
-
[Mysql] 샤딩과 파티셔닝에 대해 알아보자!DB/Mysql 2025. 4. 22. 13:40
MySQL에서의 샤딩(Sharding)과 파티셔닝(Partitioning) 개념 및 예제 대용량 데이터를 효율적으로 저장하고 처리하기 위한 방법으로 샤딩(Sharding)과 파티셔닝(Partitioning)이 자주 활용됩니다. 이 글에서는 이 두 개념을 MySQL을 중심으로 설명하고, 각각의 사용 사례 및 차이점을 정리합니다.1. 샤딩(Sharding) 이란? 샤딩은 데이터를 수평으로 분산 저장하기 위해 데이터베이스 자체를 여러 서버로 나누는 방법입니다. 사용자의 ID, 지역, 생성일자 등 특정 기준(샤딩 키)을 사용하여 데이터를 물리적으로 다른 DB에 저장합니다.샤딩 예시 (MySQL 기반)DB A: 사용자 ID 1 ~ 99999DB B: 사용자 ID 100000 ~ 199999DB C: 사용자..
-
[Mysql] slow query 발생 원인 및 해결 방안을 알아보자!DB/Mysql 2025. 4. 22. 11:02
MySQL에서 잘 동작하던 쿼리가 갑자기 느려지는 이유와 해결 방안MySQL을 운영하다 보면 이전까지 빠르게 실행되던 쿼리가 어느 순간부터 슬로우 쿼리(Slow Query)로 전환되는 경우가 있습니다. 이 글에서는 그러한 현상이 발생하는 주요 원인과 해결 방법을 정리해보았습니다.🛠 주요 원인 데이터 양의 급증 인덱스를 잘 사용하던 쿼리도 데이터 양이 많아지면서 쿼리 성능이 떨어질 수 있습니다. 통계 정보(Statistics) 갱신 지연 MySQL 옵티마이저는 통계 정보를 기반으로 실행 계획을 수립합니다. 통계 정보가 오래되었으면 비효율적인 실행 계획이 수립될 수 있습니다. 인덱스 손상 또는 누락 테이블 구조 변경, 인덱스 제거 등의 이유로 기존에 잘 사용되던 인덱..
-
[Mysql] 인덱스는 어떻게 동작할까?DB/Mysql 2025. 4. 17. 14:42
🔍 인덱스는 어떻게 작동하나요?인덱스는 책의 목차처럼, 원하는 데이터를 더 빠르게 찾을 수 있도록 도와주는 역할을 합니다.📘 예시CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), age INT);-- email 컬럼에 인덱스를 생성CREATE INDEX idx_email ON users(email);-- email을 조건으로 검색SELECT * FROM users WHERE email = 'test@example.com';이 경우, MySQL은 전체 테이블을 스캔하지 않고 인덱스를 먼저 탐색해 해당 데이터를 빠르게 찾습니다.🚫 어떤 경우에 인덱스를 사용하지 않는 것이 좋을까요?모든 상황에서 인덱스가 유..
-
[Mysql] 트랜잭션과 ACID 이해하기!DB/Mysql 2025. 4. 15. 15:51
🔸 트랜잭션(Transaction)이란? 트랜잭션이란, 하나의 작업 단위를 이루는 일련의 SQL 명령들의 집합입니다. 데이터베이스에서는 여러 작업이 모두 성공하거나, 모두 실패해야 일관성이 유지되기 때문에 트랜잭션이라는 개념이 중요합니다. 예를 들어, 은행 계좌 이체를 생각해볼게요. -- A 계좌에서 1000원 출금UPDATE accounts SET balance = balance - 1000 WHERE user_id = 'A';-- B 계좌에 1000원 입금UPDATE accounts SET balance = balance + 1000 WHERE user_id = 'B'; 이 두 쿼리는 반드시 함께..
-
[Mysql] 인덱스 생성 시 고려 사항 (테이블, 쿼리 예제)DB/Mysql 2025. 4. 15. 13:55
📌 MySQL 인덱스 생성 시 어떤 키로 만들어야 할까?아래와 같은 room_message 테이블과 쿼리가 있다고 가정해보겠습니다.CREATE TABLE room_message ( id BIGINT AUTO_INCREMENT PRIMARY KEY, create_date TIMESTAMP(6) NULL, update_date TIMESTAMP(6) NULL, delete_date TIMESTAMP(6) NULL, delete_flag BIT DEFAULT b'0' NULL, send_id BIGINT NULL, ..
-
외래키(FK) 의 제약조건에 대해 알아보자!DB/Mysql 2025. 4. 15. 11:23
🔍 외래 키 제약조건 예시 모음 (ON DELETE / ON UPDATE)아래는 다양한 FOREIGN KEY 제약 조건 조합과 그 작동 방식을 예시로 정리한 것입니다.✅ 예시 1: ON DELETE RESTRICT / ON UPDATE RESTRICT (기본값)FOREIGN KEY (dept_id) REFERENCES department(dept_id)ON DELETE RESTRICTON UPDATE RESTRICT 자식이 참조 중인 부모 row는 삭제/수정 불가 부서가 존재할 때는 해당 부서 직원 삭제 불가✅ 예시 2: ON DELETE CASCADE / ON UPDATE CASCADEFOREIGN KEY (dept_id) REFERENCES department(dept_id)ON DELETE C..
-
[Mysql] Transaction Row Lock 전파되는 경우?DB/Mysql 2025. 4. 15. 11:18
🔐 MySQL 트랜잭션과 외래키(FK) - Row Lock 전파되는 경우?MySQL에서 트랜잭션 중 Row Lock이 걸릴 때, 외래키로 연결된 다른 테이블에도 락이 전파될까?결론부터 말하면, 명시적으로 접근하지 않으면 자동으로 락이 전파되지 않는다.📌 기본 개념MySQL(InnoDB)은 행 단위 잠금(Row-level Locking)을 사용외래키(Foreign Key)로 연결되어 있어도, 관련 테이블의 row에 자동으로 락은 걸리지 않음CREATE TABLE parent ( id INT PRIMARY KEY);CREATE TABLE child ( id INT PRIMARY KEY, parent_id INT, FOREIGN KEY (parent_id) REFERENCES parent(id));..