[Database] Oracle Access Path
Access Path
오라클이 데이터에 도달할 수 있는 방법
- 전체 스캔
- 다양한 종류의 인덱스
- 해시 또는 rowid에 의해 유도된 액세스
- 각 액세스 경로의 쓰임새는 서로 다르므로 모든 액세스 경로가 좋고 나쁨이 없이 모두 유용하다.
Table full scan
- 데이터를 얻기 위해 모든 블록을 순차적으로 읽음. 또한 멀티블록으로 읽음.
- Multi block i/o :오라클은 한번의 io호출로 한개가 아닌 N개의 블록을 읽음.
RowId access
- rowid
- 데이터의 물리적인 주소로 파일에 대한 행, 블록, 그리고 블록의 행에 관한 정보를 가지고 있음
- 특정행에 도달하는 가장 빠른 방법
RowId 범위
- RowId 범위를 사용하면 하나의 테이블에 대한 모든 작업을 병렬로 처리가능
- 각 프로그램이 하나의 테이블에 대해서 물ㄹ리적으로 뭉쳐있는 데이터에 대하여 수행되도록 보장하기 때문
- 각 프로그램이 같은 공유 디스크 리소스로 다투지 않음.
Index Scan
- root :인덱스의 다음 레벨을 가리키는 엔트리 포함
- branch :인덱스의 다음 레벨을 가리키는 엔트리 포함
- leaf :테이블의 행을 가리키는 인덱스 엔트리를 포함. 양방향 linked list로 연결
Index unique scan
- unique index에서는 데이터가 오직 인덱스 키 값에 따라 정렬되어 있음.
Index Range scan
- 행이 하나도 반환됮 않거나 하나 이상의 행이 반환될 수 있다.
- 일반적으로 인덱스는 오름차순으로 데이터를 읽지만 인덱스를 거꾸로 읽어야 할지라도 다시 정렬하거나 하지않고 인덱스 뒤에서부터 시작하여 읽을 수 있다.
Index skip scan
- 이름이 의미하는 것과는 달리 인덱스 구조의 모든 블록을 읽지는 않는다.
- 인덱스 모든 잎 블록을 처리하지만 첫번째 잎블록을 찾을 때 까지만 가지블록을 처리한다.
- 잎 블록은 가지블록을 통해서 도달되나, 현재의 위치가 잎블록일 경우 포인터를 따라가기만 해도 다음블록에 도달할 수 있으므로 데이터를 앞뒤로 순회할 수 있다.
- 선행 칼럼이 입력되지 않은 경우 선행 칼럼의 개별 값 별로 모두 탐색하여 검색하는 방법
Index fast full scan
- 내부 가지블록을 포함하여 인덱스 구조의 모든 블록을 읽는다.
- 테이블 전체 스캔과 마찬가지로 다중 블록읽기를 사용한다.
- 데이터를 정렬된 순서대로 검색하지 않는다.
- 쿼리가 인덱스의 대상이 열만을 참조하고 이 인덱스에 빠른 인덱스 전체 스캔을 적용함으로써 테이블의 전체 스캔을 피할 수 있는 경우에 사용된다.
- 이런 유형의 인덱스 스캔으로부터 반환된 데이터는 정렬된 상태가 아님.