ORACLE [ORACLE] 오라클 Table Full Scan VS Index Range Scan 미로그 2024. 7. 30. 21:58 테이블의 데이터를 읽는 방식으로는 크게 2가지로 나뉜다. Full Table Scan : 테이블 전체를 스캔해서 읽는 방식 Index Range Scan : 인덱스를 이용해서 읽는 방식 Full Table Scan 이란 ? 시퀀셜 액세스와 Multiblock I/O 방식으로 디스크 블록을 읽는다. 한 블록에 속한 모든 레코드를 한 번에 읽어 들이고, 캐시에서 못 찾으면 '한 번의 수면(I/O Call)을 통해 인접한 수십~수백 개의 블록을 한꺼번에 I/O하는 메커니즘이다. 이 방식을 사용하는 SQL 은 스토리지 스캔 성능이 좋아지는 만큼 성능도 좋아진다. BUT 시퀀셜 액세스와 multiblock i/o 가 아무리 좋아도 수십~수백 건의 "소량" 데이터를 찾을 때 수백만~수천만 건 데이터를 스캔하는 것은 비효율적이다. 그래서 큰 테이블에서 소량 데이터를 검색할 때는 반드시 인덱스를 이용해야 한다. Index Range Scan 이란 ? 랜덤 액세스와 Single Block I/O 방식으로 디스크 블록을 읽는다. 캐시에서 블록을 못 찾으면, '레코드 하나를 읽기 위해 매번 잠을 자는 I/O 메커니즘이다. 많은 데이터를 읽을 때는 Table Full Scan 보다 불리하다. 열심히 일해야 할 프로세스가 대기 큐에 들어가서 잠을 자버려서 스캔 성능이 안나온다. 읽었던 블록을 반복해서 읽는 비효율이 있다. 한 블록에 평균 500개의 레코드가 있다면 같은 블록을 최대 500번 읽을 수 있다는 것이다. 인덱스를 이용해서 '전체 레코드' 500개를 액세스한다면 각 블록을 단 한번만 읽는 table full scan 보다 훨씬 성능이 떨어진다. SO 읽을 데이터가 일정량을 넘으면 인덱스보다 Table Full scan 이 유리하다. 총 정리 대용량 데이터 중에서 극히 일부의 데이터를 찾을 때, 인덱스 스캔 방식(Index Scan)은 인덱스를 이용해 몇 번의 I/O만으로 원하는 데이터를 쉽게 찾을 수 있다. 그러나 전체 테이블 스캔 (Full Table Scan)은 테이블의 모든 데이터를 읽으면서 원하는 데이터를 찾아야하기 때문에 비효율적인 검색을 하게 된다. 그러나 반대로 테이블의 대부분의 데이터를 찾을 때는 한 블록씩 읽는 인덱스 스캔 방식보다는 어차피 대부분의 데이터를 읽을 거라면 한번에 여러 블록 씩 읽는 전체 테이블 스캔방식이 유리할 수 있다. Reference https://genote.tistory.com/m/47 https://hoon93.tistory.com/53 공유하기 게시글 관리 MI_Log 'ORACLE' 카테고리의 다른 글 [ORACLE] 오라클 HINT 란? (0) 2024.08.24 [DB] 옵티마이저란(Optimizer) ? (0) 2024.08.24 'ORACLE' Related Articles [ORACLE] 오라클 HINT 란? [DB] 옵티마이저란(Optimizer) ?