MySQL 서버는 사용자의 요청을 처리하기 위해 1) 데이터를 가공하는 기본 절차 2) 빠른 성능을 보장하기 위한 최적화를 수행합니다.
이번 글에서는 데이터를 정렬하거나 그루핑하는 등의 기본 데이터 가공 기능에 관해 살펴보겠습니다.
풀 테이블 스캔과 풀 인덱스 스캔
풀 테이블 스캔은 인덱스를 사용하지 않고 테이블의 데이터를 처음부터 끝까지 읽는 작업을 의미합니다. 다음과 같은 조건일 때 주로 풀 테이블 스캔을 선택합니다.
- 테이블의 레코드 건수가 너무 작아 인덱스를 사용하는 것보다 테이블을 스캔하는 것이 빠를 경우(일반적으로 테이블이 페이지 1개로 구성된 경우)
- WHERE 절이나 ON 절에 인덱스를 이용할 수 있는 적절한 조건이 없는 경우
- 인덱스 레인지 스캔을 사용할 수 있는 쿼리라고 하더라도 옵티마이저가 판단한 조건 일치 레코드 건수가 너무 많은 경우(인덱스의 B-Tree를 샘플링해서 조사한 통계 정보 기준)
인덱스 풀 스캔은 쿼리가 인덱스의 칼럼만으로 작업할 수 있는 경우 사용합니다. 더 자세한 내용은 이 글을 참고해주세요.
병렬 처리
MySQL 8.0 버전부터 한정된 용도로 쿼리의 병렬 처리가 가능해졌습니다. innodb_parallel_read_threads 시스템 변수를 이용해 하나의 쿼리를 최대 몇 개의 스레드를 이용해 처리할지를 변경할 수 있습니다. 하지만 단순히 테이블 전체 건수를 가져오라는 쿼리만 병렬 처리할 수 있습니다.
'Database' 카테고리의 다른 글
[MySQL] 옵티마이저 - 개요 (0) | 2023.06.09 |
---|---|
[MySQL] 외래키 (1) | 2023.06.02 |
[MySQL] 유니크 인덱스 (0) | 2023.06.02 |
[MySQL] 클러스터링 인덱스 (0) | 2023.05.25 |
[MySQL] 함수 기반 인덱스 (0) | 2023.05.20 |