1. MySQL의 특징
MySQL은 전체적으로 어떻게 생겼나?
책에서는 MySQL을 '서버 엔진'과 '스토리지 엔진'으로 구분해서 설명한다.
서버 엔진
- 클라이언트의 요청을 받아 SQL을 처리하는 DB 자체의 기능적인 역할
- SQL Interface, Parser, Optimizer, Cache&Buffers
- 사용자와 MySQL 사이에서 발생하는 데이터 처리 프로세스의 대부분을 담당
스토리지 엔진
- 서버 엔진이 필요한 데이터를 물리 장치에서 가져오는 역할
- 물리적인 저장장치에서 데이터를 읽어오는 역할을 수행
- 다른 DBMS와 다르게 스토리지 엔진이 플러그인 방식으로 동작
- 스토리지 엔진 종류 : InnoDB, MyISAM, MGR_MYISAM, BLACKHOLE, CSV, MEMORY, FEDERATED, ARCHIVE
MyISAM | InnoDB | |
스토리지 제한 | 256TB | 64TB |
트랜잭션 | No | Yes |
Locking 레벨 | Table | Row |
인덱스 | B-Tree | B-Tree |
Cache | Index | Data/Index |
파티셔닝 | Yes | Yes |
Cluster Index (인덱스 순서로 데이터가 저장되어 있는 구조) |
No | Yes |
Foreign Key | No | Yes |
MyISAM - 텍스트 전문을 검색하는 '풀텍스트 인덱싱', 지리 정보를 처리할 수 있는 '지오메트릭 스파셜 인덱싱' 등의 기능 제공
- 인덱스만 메모리에 올린다. 데이터는 디스크에서 바로 접근한다.
InnoDB - 인덱스와 데이터까지 메모리에 적재한다.
서버 엔진은 스토리지 엔진의 API를 호출하며, 실제 필요한 데이터를 요청하고 조작한다.
MySQL은 데이터를 어떻게 처리할까?
1. MySQL은 모든 SQL을 단일 코어에서 처리한다.
- 병렬 처리를 하지 않는다.
2. 테이블 조인을 Nested Loop Join 알고리즘으로만 처리한다.
- Nested Loop Join은 선행 테이블 A의 조건 검색 결과값 하나하나를 테이블 B와 비교하여 조인하는 방식
- Block Nested Loop Join : 테이블 조인 시 필요한 데이터를 메모리에 일시적으로 저장하여 위의 방식보다 효율적
📖 출처
성동찬 지음, 『MySQL 퍼포먼스 최적화』, 한빛미디어(2013)
'개발 > MySQL' 카테고리의 다른 글
MySQL] utf8 vs utf8mb4 (0) | 2023.01.05 |
---|---|
MySQL] MySQL 퍼포먼스 최적화 (WHERE 조건 이해) (0) | 2022.03.19 |
MySQL] MySQL 퍼포먼스 최적화 (쿼리 성능 최적화) (0) | 2022.03.19 |