Study/MySQL 6

조인 방식 비교 (네스티드 루프 조인 VS 블록 네스티드 루프 조인 VS 해시 조인)

1. 네스티드 루프 조인 (Nested Loop Join)조인 연결 컬럼에 모두 인덱스가 있을 때 사용하는 기본 조인 방식드라이빙 테이블에서 레코드 1건 읽기 ↓즉시 드리븐 테이블에서 일치하는 레코드 찾기 ↓별도 버퍼 없이 바로 반환 (중첩 반복문과 유사)드리븐 테이블 인덱스가 없으면 왜 느린가?드라이빙 테이블 일치 레코드 = 1,000건 ↓드리븐 테이블 인덱스 없음 ↓드리븐 테이블 풀 스캔 1,000번 수행 → 매우 느림👉 옵티마이저는 최대한 드리븐 테이블이 인덱스를 사용하도록 실행 계획을 수립한다.2. 블록 네스티드 루프 조인 (Block Nested Loop Join)드리븐 테이블에 인덱스를 사용할 수 없을 때 조인 버퍼를 활용하는 방식블록 네스티..

Study/MySQL 2026.03.16

MySQL 풀 테이블 스캔과 리드 어헤드

풀 테이블 스캔(Full Table Scan) 선택 조건레코드 수가 너무 적을 때인덱스를 거치는 것보다 전체 스캔이 더 빠른 경우 (보통 테이블이 1페이지로 구성된 경우)적절한 인덱스 조건 없음WHERE절이나 ON절에 사용할 수 있는 인덱스가 없는 경우일치 레코드가 너무 많을 때인덱스 레인지 스캔이 가능하더라도, 조건에 맞는 레코드가 너무 많다고 판단한 경우리드 어헤드리드 어헤드(Read Ahead): 앞으로 필요할 데이터를 요청 전에 미리 디스크에서 읽어 버퍼 풀에 적재해두는 InnoDB의 최적화 기법이다. - 풀 테이블 스캔 시 리드 어헤드 동작 흐름① 포그라운드 스레드가 처음 몇 개의 페이지를 읽기 시작 ↓② 특정 시점이 되면 백그라운드 스레드로 읽기 작업을 넘김 ↓③ 백그..

Study/MySQL 2026.03.08

B-Tree 인덱스를 통한 데이터 읽기

인덱스 레인지 스캔인덱스 레인지 스캔은 인덱스에서 어디부터 어디까지 읽을지 범위가 정해졌을 때 사용하는 방식.예시) WHERE name >= 'Kim' AND name 와 같은 범위 검색에서단계 1: “어디서부터 읽을지 찾는 과정” 단계트리 위에서 아래로 내려가면서 시작 지점을 찾는다.단계 2: 스캔 단계시작 리프 노드를 찾았으면 리프 노드 안에서 정렬된 순서대로 쭉 읽는다.리프 노드는 서로 링크(포인터) 로 연결되어 있어서, 한 리프 노드를 끝까지 읽으면 링크를 타고 다음 리프 노드로 이동해서 계속 읽음단계 3: 실제 데이터 읽기 단계 👉 이 단계에서 랜덤 I/O 발생인덱스에는 보통 키 값과 레코드 주소(PK 또는 ROWID)인덱스에서 얻은 주소를 이용해실제 데이터 페이지를 다시 읽음최종 레코드 반..

Study/MySQL 2026.03.02

B-Tree 인덱스 사용에 영향을 미치는 요소

인덱스 키 값의 크기인덱스 키가 커지면 발생하는 일로는 인덱스는 디스크에 저장되고, 검색 시 디스크 또는 메모리(Buffer Pool)에서 한 페이지 단위로 읽힌다.그런데 인덱스 키 값이 길어질수록 한 페이지에 저장할 수 있는 레코드 수가 줄어든다.👉 같은 데이터를 찾기 위해 더 많은 페이지를 읽어야 할 수 있음으로, 디스크 I/O 증가하고 검색 속도 저하인덱스 키 값이 작아야하는 이유인덱스에 저장되는 값의 바이트 수가 적어야한다는 의미왜 작아야 좋을까?InnoDB는 인덱스를 16KB 페이지 단위로 저장한다.키가 작으면한 페이지에 더 많은 인덱스 레코드 저장 가능B-Tree 높이가 낮아짐디스크 I/O 감소메모리 캐시 효율 증가인덱스의 선택도기본 상황SELECT *FROM bt_testWHERE coun..

Study/MySQL 2026.03.02

디스크 읽기 방식 HDD VS SSD

CPU랑 메모리CPU랑 메모리는 전기로만 움직이는 장치로, 기술이 발전하면서 속도가 엄청 빠르게 좋아졌다.CPU → 계산 속도 엄청 빨라짐메모리 → 데이터 읽고 쓰는 속도 엄청 빨라짐하드디스크(HDD)랑 SSD(Solid State Drive)하드디스크(HDD)는 안에 원판이 실제로 돌아가는 기계 장치로물리적으로 움직여야 함읽을 위치까지 헤드가 이동해야 함시간이 오래 걸림👉 그래서 CPU/메모리만큼 빨리 발전하지 못했다.이러한 기계식 하드디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD(Solid State Drive)가 출시됨.SSD는 기존 하드디스크 드라이브에서 원판를 제거하고, 그 대신 플래시 메모리를 장착움직이는 부품 없음그냥 전기 신호로 바로 읽음위치 이동 개념이 거의 없음👉 랜덤으..

Study/MySQL 2026.03.01

MySQL 격리 수준

격리 수준: 하나 트랜잭션 애에서 또는 서로 다른 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다.READ UNCOMMITED는 일반적인 데이터베이스에서는 거의 사용하지않고, SERIALIZABLE 또한 동시성이 중요한 데이터베이스에서는 거의 사용되지않는다.READ COMMITTED 격리 수준에서는 트랜잭션내에서 실행되는 SELECT 문장과 트랜잭션 외부에서 실행되는 SELECT 문장의 차이가 별로지만, REPEATABLE READ 격리 수준에서는 기본적으로 SELECT 쿼리 문장도 트랜잭션 범위 내에서만 작동한다. READ UNCOMMITTEDREAD UNCOMMITTED에서는 더티 리드(Dinty read)이라고 하는 현상이 발생한다.사용자 Aemployees 테이..

Study/MySQL 2026.02.17