본문 바로가기

DB관련

[DB] 테이블의 스캔방식

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