db에서 db오브젝트를 스캔하는 방식에 따라 속도가 차이가 난다는 걸 최근에 알게 되었다.
때문에 정리를 해보고자 한다.
디스크의 접근 방식
1.시퀸셜 액세스
- 물리적으로 인접한 페이지를 순차적으로 읽는 방식이다.
- 디스크 헤더의 움직임을 최소하하여 작업시간과 리소스 점유 시간을 줄일 수 있다.
2.랜덤 액세스
- 물리적으로 떨어진 페이지를 임의로 접근하는 방식이다.
- 디스크 헤더에 많은 움직임을 요구하기 때문에 접근 시간이 오래걸린다.
- 접근 범위를 줄이는 방식으로 튜닝이 필요할 수도 있따.
테이블 스캔방식
1.테이블 풀 스캔
- 인덱스를 거치지 않고 테이블 데이터 처음부터 끝까지 모든것을 스캔하는 방식이다.
- where 조건을 기준으로 인덱스가 없을경우 이 스캔방식을 사용한다.
- 시퀸셜 액세스 방식이기 문에 대량의 데이터에 접근할때 인덱스를 통한 랜덤 액세스가 없다.
인덱스 풀 스캔
-테이블에 접근하지 않고 인덱스의 열만 우선 처음부터 끝까지 스캔한다. 데이터의 일부문 사용하기 때문에 테이블 풀 스캔보다는 유리하다.
인덱스 범위 스캔
- BETWEEN , AND, LIKE , >< 등을 사용했을때 사용되는 방식이다. 우선 인덱스를 범위기준으로 스캔한다.
그 뒤에 스캔 한 결과를 토대로 테이블에 접근한다.
- 좁은 범위를 수행할 경우에는 효율적이나 범위가 넓어질수록 효율이 떨어진다.
인덱스 고유 스캔
- WHERE 에 = 을 사용했을때 기본키나 고유 인덱스로 테이블에 접근하는 방식이다.
- 인덱스를 사용하는 방식중 가장 효율적인 방법이다.
인덱스 루스 스캔
- 인덱스에서 필요한 부분만 선택해 스캔하는 방식이다.
- 인덱스 범위 스캔과 다르게 WHERE 조건문을 기준으로 범위내의 필요한 데이터와 불필요한 데이터를 구분한 뒤
불필요한 인덱스 키는 무시한다.
- 보통 GROUP BY , MAX(), MIN() 등의 함수가 포함될때 동작된다.
인덱스 병합 스캔
- 테이블 내에 생성되어있는 인덱스를 통합하여 스캔하는 방식이다.
- WHERE 절의 조건 칼럼이 서로 다른 인덱스에 존재할때 사용된다.
참고
https://lemontia.tistory.com/920
https://velog.io/@jooh95/DB-Scan-%EC%A2%85%EB%A5%98-%EC%A0%95%EB%A6%AC
'DB관련' 카테고리의 다른 글
maira db 설치하기 (0) | 2023.11.14 |
---|---|
SQL 쿼리의 실행 순서 (0) | 2023.11.01 |
데이터 베이스 옵티마이저란? (0) | 2023.10.29 |
데이터 모델링 (0) | 2021.01.20 |
DB에 관하여 (0) | 2021.01.20 |