mysql
-
[Mysql] 조인 테이블 조회시 드라이빙? 드리븐? 테이블 설명 및 STRAIGHT_JOIN 힌DB/Mysql 2025. 4. 22. 16:26
드라이빙 테이블과 드리븐 테이블이란?SQL에서 여러 테이블을 조인할 때, 옵티마이저는 효율적인 조인을 위해 조인의 시작 테이블과 그 이후 조인될 테이블을 구분합니다. 이를 각각 드라이빙(Driving) 테이블과 드리븐(Driven) 테이블이라고 합니다.🚗 드라이빙 테이블 (Driving Table) 조인의 시작점이 되는 테이블입니다. 옵티마이저가 가장 먼저 액세스합니다. WHERE 조건의 선택도(Selectivity)가 높은 테이블일수록 유리합니다.🧭 드리븐 테이블 (Driven Table) 드라이빙 테이블의 결과에 따라 조인되는 테이블입니다. 보통 루프 안에서 여러 번 조회됩니다. 인덱스를 잘 걸어야 성능 저하를 방지할 수 있습니다.예시 쿼리에 적용해 보기SELECT * FROM C JO..
-
[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은 전체 테이블을 스캔하지 않고 인덱스를 먼저 탐색해 해당 데이터를 빠르게 찾습니다.🚫 어떤 경우에 인덱스를 사용하지 않는 것이 좋을까요?모든 상황에서 인덱스가 유..
-
RDBMS 와 NoSQL 비교해 보기IT 2025. 4. 17. 14:31
🔍 RDBMS vs NoSQL 차이점 항목 RDBMS (Relational DBMS) NoSQL (Not Only SQL) 데이터 모델 테이블 기반 (행/열) 문서, 키-값, 그래프, 컬럼 기반 등 스키마 고정 스키마 (정해진 구조) 유연한 스키마 또는 스키마 없음 확장성 수직 확장 (서버 스펙 업) 수평 확장 (서버를 여러 개로 분산) 트랜잭션 ACID 보장 (정합성 우선) 대부분 Eventually Consistent (속도 우선) 쿼리 언어 SQL 전..
-
[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));..