-
MySql 오브젝트 스캔 유형공부하기/데이터베이스 2023. 2. 28. 07:02
오브젝트 스캔 유형
1.테이블 스캔 (Table Scan) : 인덱스를 거치지 않고 바로 디스크에 위치한 테이블 데이터에 접근
(1) 테이블 풀 스캔 (Table Full Scan)
- 테이블의 처음부터 끝까지 데이터를 훑어보는 방식으로 인덱스를 사용하지 않는 유일한 방식
사용
- where 접의 조건문을 기준으로 활용할 인덱스가 없는 경우
- 전체 데이터 대비 대량의 데이터가 필요할 경우 (보통 20%~25%)
2.인덱스 스캔 : 인덱스로 테이블 데이터를 찾아가는 유형
(1) 인덱스 범위 스캔 (Index Range Scan)
- 인덱스를 범위 기준으로 스캔한 뒤 스캔 결과를 토대로 테이블 데이터를 찾는 방식
사용
- BETWEEN ~ AND 구문이나 <, >, LIKE 구문 등 비교 연산 및 구문에 포함될 경우
특징
- 좁은 범위를 스캔할 때는 성능적으로 매우 효율적
- 넚은 범위를 스캔할 경우 비효율적인 방식
(2) 인덱스 풀 스캔 (Index Full Scan)
- 인덱스를 처음부터 끝까지 수행하는 방식
사용
- 인덱스로 구성된 컬럼만 요구하는 쿼리문에서 수행
특징
- 모든 컬럼을 읽는 것이 아닌 인덱스 컬럼만 읽는 경우에 발생하기 때문에 상대적으로 풀 스캔에 비해 성능상 유리
- 인덱스 전 영역을 전부 검색하는 방식인 만큼 sql 튜닝이 필요
(3) 인덱스 고유 스캔 (Index Unique Scan)
- 기본 키나 고유 인덱스로 테이블에 접근하는 방식
사용
- where 절에 = 조건으로 작성
- 조인 컴럼이 기본 키 또는 인덱스의 선두 열로 설정되었을 때
특징
- 인덱스를 사용하는 스캔 방식 중 가장 효율적인 스캔 방법
(4) 인덱스 루스 스캔 (Index Loose Scan)
- 인덱스의 필요한 부분들만 골라 스캔하는 방식
- 이미 정렬된 인덱스에서 최댓값이나 최소값이 필요한 경우에 해당
사용
- 보통 group by 구문이나 MAX(), MIN() 함수가 포함되면 작동
특징
- 인덱스 범위 스캔처럼 넓은 범위에 전부 접근하지 않고 필요한 데이터와 필요하지 않는 데이터를 구분한 뒤 불필요한 인덱스는 무시한다
(5) 인덱스 병합 스캔 (Index Merge Scan)
- 테이블 내에 생성된 인덱스들을 통합해서 스캔하는 방식
사용
- where 조건절의 열들이 서로 다른 인덱스인 경우
- 옵티마이저가 해당하는 인덱스를 가져와 모두 활용하는 경우
특징
- 통합하는 방법으로 결합(Union)과 교차(Intersection) 방식이 있으며 둘 다 실행 계획으로 출력된다.
'공부하기 > 데이터베이스' 카테고리의 다른 글
Redis Data Types 요약 (0) 2023.03.03 Mac m1 Redis 설치 기록 (0) 2023.03.03 [용어] MySql 드라이빙 테이블, 드리븐 테이블 (0) 2023.02.28 mysql 쿼리 실행 절차 (0) 2023.02.19 MySql Isolation Level(격리수준) (0) 2023.02.19