당신의 검색 속도가 느린 이유(feat. Index는 만능 열쇠가 아니다!)MySQL B+Tree Index와 FULLTEXT Index의 차이Index는 흔히 "검색 성능 문제의 만능 열쇠"처럼 여겨진다. 쿼리가 느리면 일단 인덱스부터 걸어보고, EXPLAIN에 인덱스 이름이 잡히면 안심하는 경우가 많다. 그런데 인덱스를 만들어도 쿼리는 여전히 느릴 수 있다. 인덱스를 탔다는 사실과 빠르게 동작한다는 사실은 별개의 문제이기 때문이다.회원 검색 API를 개발하다 보면 이런 상황을 마주할 수 있다.SELECT id, name, phoneFROM memberWHERE name LIKE '%윤혁%'LIMIT 20;회원 이름으로 검색하는 단순한 쿼리다. member 테이블에는 약 500만 건의 row가 있었고,..
mysql
Contents11.3 MySQL 연산자와 내장 함수11.3.1 리터럴 표기법11.3.2 MySQL 연산자11.3.3 MySQL 내장 함수11.4 SELECT 최적화 포인트지연된 조인(Delayed Join) 실무 예시서브쿼리 위치별 특성과 전환 전략잠금을 사용하는 SELECT (NOWAIT, SKIP LOCKED)참고1) 실무 쿼리 튜닝 사례 및 베스트 프랙티스참고2) 실행 효율성(Execution Efficiency) 고급 기법 11.3 MySQL 연산자와 내장 함수 #11-3MySQL은 ANSI 표준 SQL과 호환되는 부분이 많지만, sql_mode 설정 및 MySQL 고유 문법에 따라 동작이 달라질 수 있다. 이 절에서는 리터럴 표기법, 주요 연산자, 실무에서 빈도가 높은 내장 함수의 핵심을 ..
📌 Real MySQL 8.009. 옵티마이저와 힌트🧭 목차9.1 개요9.1.1 쿼리 실행 절차9.1.2 옵티마이저의 종류9.2 기본 데이터 처리9.3 고급 최적화9.4 쿼리 힌트9.1 개요실행 계획을 이해하는 것은 상당히 어렵다. 하지만 실행 계획을 이해할 수 있어야만 더 최적화된 방법으로 실행 계획을 수립하도록 유도할 수 있다.9.1.1 쿼리 실행 절차MySQL 서버에서 쿼리가 실행되는 과정은 크게 3단계로 나눌 수 있다.사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리한다.SQL의 파싱 정보를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다.두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔..
MySQL 8.0 데이터 압축 · 암호화 통합 가이드스토리지·I/O 효율과 데이터 보호를 함께 이해하기 위한 아키텍처 정리📄 6장. 데이터 압축 핵심페이지 압축: 파일 시스템의 Punch Hole(희소 파일) 기능을 활용해 디스크 사용량을 줄인다.테이블 압축: InnoDB 내부에서 압축 블록(KEY_BLOCK_SIZE)을 기준으로 페이지를 압축 저장한다.실무 관점: I/O 감소 vs CPU/메모리 오버헤드의 균형이 핵심이다.🔐 7장. 데이터 암호화 핵심서버 데이터 암호화: 키를 “마스터 키 + 테이블스페이스 키”로 나누는 2단계 키 관리가 기본이다.로그 암호화: Undo/Redo와 Binlog까지 암호화 범위를 확장할 수 있다.운영 관점: 성능, 복제/백업, 키 로테이션 절차까지 함께 설계해야 한다...
Real MySQL 8.0 – 인덱스 정리인덱스는 “많이 만들수록 좋은 것”이 아니었고, “언제·어디에·어떤 걸·어떻게 써야 하는지”가 핵심이었음목차 1. 디스크 I/O 3. B-Tree 구조 6. 읽기 패턴 9. PK 설계 체크리스트목차디스크 I/O와 인덱스의 존재 이유인덱스란 무엇인가 – SortedList vs ArrayListB-Tree 인덱스 구조 – InnoDB vs MyISAMB-Tree 인덱스의 쓰기 동작인덱스 성능에 영향을 주는 요소B-Tree를 통한 데이터 읽기 패턴다중 컬럼 인덱스와 Left-most 규칙기타 인덱스: R-Tree, Fulltext, 함수 기반, 멀티 밸류클러스터링 인덱스와 InnoDB의 PK 설계유니크 인덱스와 외래 키인덱스 설계 실무 체크리스트1. 디스크 I/O와 ..
Real MySQL 8.0 – 5장 트랜잭션과 잠금0. 핵심 개념 정리본격적으로 들어가기 전에, 이 장에서 계속 반복해서 등장하는 두 개념부터 정리하고 가자.트랜잭션 (Transaction)하나의 논리적 작업 단위를 전부 성공(COMMIT)하거나 전부 취소(ROLLBACK)하여, 중간에 일부만 반영되는 부분 업데이트(Partial Update)가 발생하지 않도록 보장하는 기능이다. 즉, 데이터의 정합성(Consistency)을 책임지는 장치이다.잠금 (Lock)여러 세션이 동시에 동일한 데이터에 접근할 때, 동시에 변경되는 것을 방지하여 정합성과 동시성을 제어하는 메커니즘이다. 트랜잭션이 “무엇을 할지”에 대한 규칙이라면, 잠금은 “여럿이 동시에 접근할 때 어떻게 조율할지”에 대한 규칙이다.5.1 트랜잭..