전체 글
-
실전 튜닝 사례 – 느린 쿼리 개선하기 (10편)공부/sql(중급) 2025. 6. 22. 09:35
SQL을 잘 작성하는 것도 중요하지만, 느린 쿼리를 분석하고 개선하는 능력은 실무에서 더욱 요구되는 역량입니다.이번 글에서는 실제로 많이 겪는 느린 쿼리의 문제 유형과 이를 어떻게 분석하고 튜닝했는지를 케이스 중심으로 설명합니다.SQL 심화 시리즈의 마지막 편으로서, 지금까지 배운 모든 내용을 활용하는 실전 정리편이기도 합니다.✅ 튜닝 사례 ① – 조건절에서 인덱스를 무시하는 경우❌ BEFORE:SELECT * FROM 고객 WHERE YEAR(가입일자) = 2023;→ 인덱스 무시됨 (함수 사용으로 인해 전체 테이블 스캔)✅ AFTER:SELECT * FROM 고객 WHERE 가입일자 >= '2023-01-01' AND 가입일자 → 범위 조건으로 인덱스 활용 가능 (Index Range Scan)✅ 튜..
-
트랜잭션(Transaction)과 롤백/커밋 – 데이터 정합성 지키기 (9편)공부/sql(중급) 2025. 6. 22. 09:34
SQL을 다룰 때 가장 중요한 개념 중 하나가 바로 **트랜잭션(Transaction)**입니다.특히 데이터의 **정합성(무결성)**을 보장하고, 오류 발생 시 안전하게 복구하기 위해 꼭 알아야 하죠.이번 글에서는 트랜잭션의 개념, COMMIT, ROLLBACK, SAVEPOINT 등의 명령어를 중심으로 실무 적용 방법까지 정리합니다.✅ 트랜잭션이란?데이터베이스의 하나의 논리적 작업 단위여러 SQL 작업을 묶어 모두 성공 or 모두 실패하게 처리예: 계좌 이체는 반드시 출금과 입금이 함께 성공해야 함 (하나라도 실패하면 전체 취소)✅ 기본 명령어명령어 설명BEGIN / START TRANSACTION트랜잭션 시작COMMIT변경사항을 영구 반영ROLLBACK변경사항 취소 (트랜잭션 시작점으로 복원)✅ 예제..
-
동적 SQL(Dynamic SQL)과 Prepared Statement (8편)공부/sql(중급) 2025. 6. 22. 09:33
정적인 SQL만으로는 처리하기 어려운 상황이 많습니다.예를 들어, 테이블명이나 조건 컬럼이 실행 시점에 정해지거나, 검색 조건이 동적으로 바뀌는 경우가 그렇죠.이럴 때 사용하는 것이 바로 **동적 SQL(Dynamic SQL)**입니다.하지만 보안상 주의가 필요한 만큼 **Prepared Statement(준비된 문장)**와 함께 안전하게 다뤄야 합니다.이번 글에서는 동적 SQL의 필요성과 작성 방식, Prepared Statement로 보안을 강화하는 방법까지 정리합니다.✅ 동적 SQL이란?실행 시점에 문자열로 조합되어 실행되는 SQL프로그래밍 언어나 저장 프로시저 내에서 주로 사용됨📌 예시:SET @sql = 'SELECT * FROM 고객 WHERE ';SET @sql = CONCAT(@sql, ..
-
다중 테이블 UPDATE / MERGE 활용법 (7편)공부/sql(중급) 2025. 6. 22. 09:32
SQL에서 데이터 변경 작업은 UPDATE로도 가능하지만, 여러 테이블을 함께 참조하거나 조건에 따라 삽입/갱신을 동시에 처리하려면 더 고급 기술이 필요합니다.이번 글에서는 다음 두 가지를 중심으로 실무 예제와 함께 설명합니다:다중 테이블 UPDATEMERGE(또는 UPSERT) 문법✅ 다중 테이블 UPDATE란?하나의 테이블을 업데이트하면서 다른 테이블의 데이터를 기준으로 수정하는 방식입니다.📌 MySQL 예제:UPDATE 고객 AS cJOIN 등급 AS g ON c.등급코드 = g.등급코드SET c.할인율 = g.기본할인율;→ 고객의 등급코드를 기준으로 할인율을 등급 테이블에서 가져와 반영📌 SQL Server / Oracle 방식:UPDATE 고객SET 할인율 = ( SELECT 기본할인율 F..
-
CTE(Common Table Expression)와 재귀 쿼리 (6편)공부/sql(중급) 2025. 6. 22. 09:31
복잡한 SQL을 읽기 쉽게 바꾸고, 쿼리 재사용성까지 높여주는 강력한 기능이 바로 **CTE(Common Table Expression)**입니다.또한, 계층 구조 데이터를 다룰 때는 재귀 CTE를 활용하면 어렵지 않게 트리 구조를 조회할 수 있어요.이번 글에서는 WITH 문으로 시작하는 CTE의 개념과, 실무에서 자주 쓰이는 계층형 재귀 쿼리 예제까지 함께 정리합니다.✅ CTE란?Common Table Expression의 약자WITH 절로 시작해 임시 테이블처럼 쓸 수 있는 쿼리 블록복잡한 쿼리를 쪼개서 단계별로 작성할 수 있음📌 기본 구조:WITH temp_table AS ( SELECT ... FROM ... WHERE ...)SELECT * FROM temp_table WHERE ...;✅ ..
-
윈도우 함수(Window Functions) 기초 – 실무 분석에 강한 SQL (5편)공부/sql(중급) 2025. 6. 21. 09:35
SQL을 사용하는 실무자라면 꼭 알아야 하는 고급 기능이 바로 **윈도우 함수(Window Functions)**입니다.윈도우 함수는 그룹핑을 하지 않고도 행 단위로 누적합, 순위, 이동 평균 등 분석 작업을 할 수 있게 해줍니다.엑셀의 SUMIF, RANK, AVERAGEIF 기능과 비슷하다고 보면 이해하기 쉬워요.이번 글에서는 윈도우 함수의 기본 구조와 자주 쓰이는 함수들을 소개합니다.✅ 윈도우 함수란?SELECT 결과에서 각 행에 대해 계산을 적용하는 함수기존 집계 함수(예: SUM, AVG)는 전체/그룹 단위 계산 → 윈도우 함수는 개별 행 단위로 동작📌 기본 구조:SELECT 컬럼, 함수() OVER (PARTITION BY ... ORDER BY ...) FROM 테이블;✅ 자주 쓰이는 윈도..
-
서브쿼리 vs JOIN – 언제 무엇을 써야 할까? (4편)공부/sql(중급) 2025. 6. 21. 09:34
SQL을 작성할 때, 동일한 결과를 서브쿼리(Subquery)로도 만들 수 있고 JOIN으로도 만들 수 있는 경우가 많습니다.하지만 실제 성능과 유지보수성 측면에서 서브쿼리와 JOIN은 분명한 차이가 있습니다.이번 글에서는 두 방식의 차이점, 장단점, 실무 기준에서의 선택 방법을 설명합니다.✅ 개념 정리구분 서브쿼리 JOIN정의쿼리 안에 포함된 또 다른 쿼리테이블 간 연결을 통해 데이터 결합위치SELECT, WHERE, FROM절 등 다양FROM 절에서 주로 사용사용 목적조건 제시, 집계 활용실제 데이터를 행 단위로 결합✅ 동일 결과 – 서브쿼리 vs JOIN 예시① 서브쿼리 사용SELECT 이름FROM 고객WHERE 고객ID IN ( SELECT 고객ID FROM 주문 WHERE 금액 > 100000..
-
JOIN 성능 최적화 – Nested Loop vs Hash Join (3편)공부/sql(중급) 2025. 6. 21. 09:33
SQL에서 데이터를 조인하는 건 흔한 일이지만, 조인의 방식에 따라 성능 차이가 수십 배 이상 나기도 합니다.특히 대용량 데이터를 다룰 때는 어떤 조인 알고리즘이 사용되는지에 따라 쿼리 속도가 결정되죠.이번 글에서는 실행계획에서 자주 보이는 두 가지 조인 방식,Nested Loop JoinHash Join을 중심으로 성능 차이와 사용 사례를 비교합니다.✅ Nested Loop Join이란?가장 기본적인 조인 알고리즘외부 테이블의 각 행마다 내부 테이블을 반복 탐색📌 개념 예시:A 테이블에 1,000건 / B 테이블에 1,000건이면 → 최대 1,000 x 1,000 = 1,000,000회 반복실행계획에서:MySQL: type = nested loop 또는 일반 JOIN에서 발생Oracle: NESTED..