본문 바로가기

MySQL19

[Docker/MySQL] Docker로 MySQL 개발 환경 구축하기 ✅ [실무 가이드] Docker로 MySQL 개발 환경 구축하기 (DataGrip 연동 포함)📌 1. 왜 Docker로 MySQL을 관리할까?장점설명💥 환경 격리로컬 시스템 오염 없이 독립된 DB 실행 가능♻️ 빠른 재시작docker-compose up -d 한 줄로 재시작📦 데이터 보존volume을 통해 데이터 유지 가능📄 초기 데이터 자동 import초기 .sql 파일을 컨테이너 실행 시 자동 import 가능🔁 팀 협업 호환설정이 .env와 .yml 파일로 고정되므로 누구나 같은 환경 구성 가능📁 2. 폴더 및 파일 구조먼저 아래와 같은 구조로 프로젝트 폴더를 준비하세요:~/docker-mysql-dev/├── .env # 환경변수 설정 파일├── docker-.. 2025. 5. 4.
[MySQL] `NOT IN` vs `NOT EXISTS` 비교 및 권장 방식 ✅ NOT IN vs NOT EXISTS 실무 정리: 차이점, 주의사항, 권장 방식SQL에서 "어떤 데이터가 다른 테이블에 존재하지 않을 때" 사용하는 대표적인 방법은 다음 두 가지입니다:NOT INNOT EXISTS하지만 이 두 구문은 겉보기엔 비슷해도, NULL 처리 방식과 실무 안전성 측면에서 큰 차이가 있습니다.✅ 1. 기본 사용법 비교🔹 NOT INSELECT *FROM membersWHERE id NOT IN (SELECT member_id FROM ads);id 컬럼 값이 ads.member_id 리스트에 없을 경우만 선택비교 대상 컬럼이 반드시 필요함 (컬럼 NOT IN (리스트) 형태)🔹 NOT EXISTSSELECT *FROM members mWHERE NOT EXISTS ( .. 2025. 5. 4.
[MySQL] Homebrew를 통한 MySQL 설치 (업데이트 버전) ✅ Homebrew를 통한 MySQL 설치 및 관리 (완전 정리)1. Homebrew를 통한 MySQL 설치1-0. 설치 가능한 MySQL 버전 목록 확인brew search mysql설치 가능한 버전들을 확인할 수 있음 (mysql, mysql@8.0, mysql@8.4 등)1-1. 최신 Stable 버전 MySQL 설치brew install mysql(현재 기본 설치 버전은 MySQL 9.3)1-2. 설치된 MySQL 버전 확인mysql --version2. 추가 버전 설치 (ex. MySQL 8.4)2-1. 특정 버전 설치brew install mysql@8.4Homebrew는 주요 버전별로 별도로 관리한다 (mysql@5.7, mysql@8.0, mysql@8.4, mysql@9.3 등)※ 참고:.. 2025. 4. 27.
[MySQL] Query Cost가 높아지는 조건과 성능 개선 포인트 ✅ Query Cost가 높아지는 조건과 성능 개선 포인트✅ 1. 쿼리 비용(Query Cost)이란?MySQL 옵티마이저(optimizer)가 계산한 논리적 실행 비용EXPLAIN 또는 EXPLAIN ANALYZE에서 cost=0.15..23.80 이런 식으로 나타남크다고 해서 항상 "나쁘다"는 뜻은 아님 → 상대적 판단 기준주로 다음 요소가 반영됨:디스크 I/O 비용 (풀 테이블 스캔, 정렬, 임시 테이블)읽는 행 수인덱스 사용 여부조인 순서반복 루프 횟수✅ 2. 쿼리 비용이 높아지는 주요 조건 + 개선 방향조건성능 저하 원인개선 포인트1. type: ALL테이블 전체 스캔 (풀스캔)인덱스 추가, WHERE 조건 개선2. key: NULL인덱스 미사용적절한 인덱스 생성3. WHERE 절에 함수 사용인.. 2025. 4. 13.
[MySQL] UNION / UNION ALL 결과의 고급 활용 예제 UNION 또는 UNION ALL로 만든 결과를👉 다시 조인하거나,👉 집계(GROUP BY, SUM 등) 하거나,👉 조건 필터링(WHERE, HAVING) 하는 고급 실무형 쿼리 예제.이건 리포트, 로그 통합, 활동 분석 등에서 아주 자주 등장하는 패턴.✅ UNION / UNION ALL 결과의 고급 활용 예제🎯 시나리오: 활동 기록 통합 + 분석다음과 같은 3개의 로그 테이블이 있다고 가정하자:테이블설명logins(user_id, login_time)로그인 로그orders(user_id, order_date, amount)주문 로그inquiries(user_id, inquiry_time)고객 문의 로그✅ 1. UNION ALL로 활동 로그 통합SELECT user_id, login_time AS.. 2025. 4. 13.
[MySQL] UNION / UNION ALL ✅ UNION / UNION ALL 완전 정복🧠 1. 기본 개념연산자설명UNION중복 제거하면서 두 SELECT 결과를 수직으로 합침UNION ALL중복 포함한 채로 두 SELECT 결과를 수직으로 합침🔻 공통점:SELECT 결과의 컬럼 수와 순서, 타입이 같아야 함✅ 2. 기본 사용 예시📍 예시 테이블-- 테이블 1: 고객 문의SELECT '문의' AS type, user_id, created_at FROM inquiries-- 테이블 2: 고객 불만 접수SELECT '불만' AS type, user_id, created_at FROM complaints✅ UNIONSELECT '문의' AS type, user_id, created_at FROM inquiriesUNIONSELECT '불만' AS.. 2025. 4. 13.