SQL 31

[DB Optimization#5] UNIQUE

MySQL에서 인덱스는 단순히 검색 성능을 높이기 위한 도구일 뿐만 아니라, 데이터의 무결성을 보장하는 제약 조건과도 밀접하게 연결되어 있습니다. 이번 글에서는 UNIQUE 제약 조건을 지정했을 때, MySQL이 자동으로 인덱스를 생성하는 동작 방식과 그 특징을 살펴보겠습니다. UNIQUE 제약 조건이란?UNIQUE 제약 조건은 해당 컬럼에 중복된 값이 들어가지 못하도록 제한하는 기능입니다.예를 들어, 회원의 email이나 username은 보통 중복을 허용하지 않기 때문에 UNIQUE 제약 조건을 걸어둡니다. 그런데 이 UNIQUE 제약 조건은 단순히 데이터 중복만 막아주는 것이 아닙니다.자동으로 인덱스까지 생성하여, 검색 성능 또한 개선해 줍니다. 실제 코드로 확인해보겠습니다. users라는 테이블..

SQL 2025.04.17

[DB Optimization#4] Primary Key

데이터베이스에서 성능 향상을 위해 사용하는 대표적인 도구 중 하나가 인덱스(Index)입니다.그런데 우리가 별도로 인덱스를 생성하지 않아도, 기본적으로 적용되는 인덱스가 하나 있습니다.바로 Primary Key(기본키)입니다. 기본키(Primary Key, PK)란?기본키란 테이블의 각 행(row)을 고유하게 식별하기 위한 컬럼(또는 컬럼 조합)입니다.대부분의 테이블은 데이터를 구분하기 위해 PK를 지정하며, 한 행마다 중복되지 않는 유일한 값을 갖게 됩니다.2025.04.15 - [SQL] - [Database Modeling#3] Primary Key, Foreign Key란? [Database Modeling#3] Primary Key, Foreign Key란?관계형 데이터베이스(Relationa..

SQL 2025.04.17

[DB Optimization#3] 인덱스(Index)란?

DB 성능을 높이기 위한 가장 대표적인 방법 중 하나는 인덱스(index) 를 활용하는 것입니다.많은 튜닝 기법이 존재하지만, 인덱스는 그 중에서도 기본이자 핵심입니다.이번 글에서는 인덱스가 무엇인지, 왜 필요한지, 어떻게 작동하는지를 예시를 통해 알아보겠습니다. 인덱스(Index)란?데이터베이스에서 인덱스는 검색 속도를 향상시키기 위한 자료 구조입니다.이는 데이터를 보다 빠르게 조회할 수 있도록 설계된 메커니즘입니다. 조금 더 직관적으로 말하자면, 인덱스는 특정 컬럼을 기준으로 데이터를 미리 정리해 둔 ‘찾기 쉬운 목록’이라고 이해하면 됩니다.마치 책의 목차처럼, 원하는 정보를 빠르게 찾아갈 수 있도록 돕는 역할을 합니다. 예를 들어 아래와 같은 users 테이블이 있다고 가정해봅시다. id n..

SQL 2025.04.16

[DB Optimization#2] MySQL 구조

개발을 하다 보면 어느 순간부터 데이터베이스가 느려졌다는 이야기를 듣게 됩니다.특히 서비스가 실제 사용자에게 제공되는 시점이 되면 SQL 응답 속도가 체감될 정도로 느려지는 현상을 마주하게 됩니다.이럴 때 무작정 쿼리를 수정하기보다 먼저 해야 할 일은, MySQL 내부 구조를 이해하는 것입니다. MySQL 구조를 왜 알아야 할까?SQL이 어떻게 실행되고, 어떤 과정에서 성능 병목이 발생하는지 이해하지 못하면문제의 원인을 파악하기도 어렵고, 제대로 된 튜닝도 할 수 없습니다.MySQL의 구조를 이해하면 다음과 같은 질문에 답할 수 있습니다.어떤 단계에서 성능 저하가 발생하는가?어떤 요인이 병목을 유발하는가?SQL 튜닝은 어떤 지점을 개선해야 하는가? MySQL 아키텍처 개요 MySQL에서 하나의 SQ..

SQL 2025.04.16

[DB Optimization#1] DB 성능 최적화란?

개인 프로젝트나 토이 프로젝트를 할 때는 데이터베이스(DB)의 성능 문제를 거의 느끼지 못합니다.하지만 실제 현업에서는 DB 성능 저하 문제를 한 번쯤 반드시 겪게 됩니다.페이지 로딩이 느려지거나, 조회 결과가 오래 걸리는 문제 말이죠.이런 성능 저하 문제는 단순한 불편함을 넘어서, 실제 사용자 이탈과 회사의 손실로 이어질 수 있습니다. DB 성능 저하, 왜 발생할까?동시 사용자 수의 증가→ 많은 사용자가 한 번에 접속하면 DB가 처리할 양도 급증합니다.데이터 양의 증가→ 수십만, 수백만 건의 데이터가 쌓이면 조회 속도가 점점 느려질 수 있습니다.비효율적인 SQL문 작성→ 가장 흔하면서도, 놓치기 쉬운 원인입니다. SQL이 느리면 어떤 구조든 느려집니다. DB 성능을 개선하는 대표적인 방법 방법 설명 ..

SQL 2025.04.16

[SQL#12] UNION / UNION ALL

SQL에서 UNION과 UNION ALL은 두 개 이상의 SELECT 결과를 수직으로 합치는 데 사용하는 문법입니다. 테이블 간의 관계가 없어도, 동일한 형식의 데이터를 한 번에 보여주고 싶을 때 유용합니다. 예시 테이블online_customers 테이블 id name 1Alice2Bob offline_customers 테이블idname3Charlie4Bob 1. UNIONSELECT name FROM online_customersUNIONSELECT name FROM offline_customers; name AliceBobCharlie→ Bob은 두 테이블에 모두 있지만, 한 번만 표시됩니다. 2. UNION ALLSELECT name FROM online_customersUNION ALLSE..

SQL 2025.04.16

[SQL#11] JOIN

SQL의 JOIN은 두 개 이상의 테이블을 연결해 하나의 결과로 보여주는 기능입니다.여러 테이블에서 관련 데이터를 가져올 때 필수적으로 사용되며, 특히 INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN은 관계형 데이터베이스의 핵심입니다. 예시 테이블customers 테이블 customer_id name 1Alice2Bob3Charlieorders 테이블 order_id customer_id product 1011Keyboard1021Mouse1032Monitor1044Headset 1. INNER JOIN교집합과 같이 양쪽 테이블에서 조건이 일치하는 행만 조회합니다.SELECT *FROM customersINNER JOIN orders ON customers.cust..

SQL 2025.04.16

[SQL#10] CASE

SQL에서 CASE는 조건에 따라 다른 값을 반환하는 조건문입니다.프로그래밍 언어의 if-else나 switch처럼 사용할 수 있으며,데이터를 가공하거나 집계 값을 가로 방향으로 펼치는 피벗(pivot) 작업에도 자주 활용됩니다. CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 기본값END WHEN과 THEN을 반복하여 여러 조건을 나열할 수 있습니다.ELSE는 생략 가능하며, 해당 조건이 없을 경우 기본값을 반환합니다.예시예시 테이블: sales id name region quarter amount 1AliceEastQ110002AliceEastQ215003BobWestQ120004BobWestQ225005CharlieEastQ1NULL6Charl..

SQL 2025.04.16

[SQL#9] GROUP BY / HAVING

SQL에서 데이터를 그룹 단위로 요약하거나 조건을 걸고 싶을 때 사용하는 문법이 GROUP BY와 HAVING입니다.특히 COUNT, SUM, AVG 등의 집계 함수와 함께 쓰일 때 강력한 기능을 발휘합니다. 1. GROUP BYGROUP BY 함수는 컬럼 내 공통된 값을 기준으로 데이터를 그룹화합니다.SELECT 그룹기준컬럼, 집계함수FROM 테이블명GROUP BY 그룹기준컬럼; SELECT department, COUNT(*) AS countFROM employeesGROUP BY department;→ 부서별로 몇 명의 직원이 있는지 집계departmentcountSales5HR2IT3 2. HAVINGHAVING 함수는 그룹화된 결과에 조건을 적용할 때 사용됩니다.SELECT 그룹기준컬럼, 집..

SQL 2025.04.16

[SQL#8] COUNT / SUM / AVG / MIN / MAX

SQL에서 데이터를 요약하고 분석할 때 가장 많이 쓰는 것이 집계 함수(aggregate function)입니다.대표적으로 COUNT, SUM, AVG, MIN, MAX가 있으며, 이 함수들은 여러 행을 하나의 값으로 요약할 때 사용됩니다. 이번 글에서는 집계 함수의 기본 사용법과 함께, NULL 처리 방식까지 함께 정리합니다. 1. COUNTCOUNT 함수는 컬럼별로 몇 개의 행이 존재하는지 세는 함수입니다.SELECT COUNT(컬럼명) FROM 테이블명; COUNT(*): 전체 행 개수 (NULL 포함)COUNT(컬럼명): 해당 컬럼이 NULL이 아닌 행만 집계SELECT COUNT(*) FROM users; -- 전체 회원 수SELECT COUNT(email) FROM users; ..

SQL 2025.04.16