sourcetip

인덱스 rowid BATCHED에 의한 테이블 액세스와 인덱스 rowid에 의한 테이블 액세스 간의 차이

fileupload 2023. 8. 6. 10:16
반응형

인덱스 rowid BATCHED에 의한 테이블 액세스와 인덱스 rowid에 의한 테이블 액세스 간의 차이

사용 중EXPLAIN PLANOracle 데이터베이스의 단순한 환경에서SELECT어떻게 작동하는지 알아보기 위한 진술입니다.

의 한 출력에서EXPLAIN PLAN언급된 바가 있습니다.table access by index rowid그리고 다른 하나는.table access by index rowid BATCHED.

그들 사이의 차이점은 무엇입니까?

설명서에는 이 주제에 대한 문장이 하나만 포함되어 있습니다.
https://docs.oracle.com/database/121/TGSQL/tgsql_optop.htm#GUID-4180BA97-3E2C-41F9-B282-4FB3FF9532CB

1단계에 표시된 BATCHED 액세스는 데이터베이스가 인덱스에서 몇 개의 행 ID를 검색한 다음, 클러스터링을 개선하고 데이터베이스가 블록에 액세스해야 하는 횟수를 줄이기 위해 블록에서 행에 액세스를 시도하는 것을 의미합니다.

아래의 (간체) 인덱스 예제를 생각해 보십시오.

+-------------+------------------+
| index value | block nbr-rowid  |
+-------------+------------------+
|      1      |   015-000123     |
|      2      |   034-000527     |
|      3      |   088-000285     |
|      4      |   015-000889     |
|      5      |   088-000632     |
........
........

"일반"(배치되지 않음) 방법에서 Oracle은 인덱스에 의해 결정된 순서대로 행을 검색합니다.

  1. 블록 15를 검색한 다음 이 블록에서 행 015-000123을 검색합니다.
  2. 블록 34를 검색한 다음 이 블록에서 행 034-000527을 검색합니다.
  3. 블록 88을 검색한 다음 이 블록에서 행 088-000285를 검색합니다.
  4. 블록 15(다시)를 검색한 다음 이 블록에서 행 015-000889를 검색합니다.
  5. 블록 88을 다시 검색한 다음 이 블록에서 행 088-000632를 검색합니다.

일괄 처리 방식에서 오라클은 인덱스에서 몇 개의 항목을 검색한 다음 먼저 블록 수에 따라 정렬한 다음 블록 수에 따라 결정된 순서대로 항목을 처리합니다.

  1. 블록 15를 검색한 다음 이 블록에서 행 015-000123 및 015-000889를 검색합니다.
  2. 블록 34를 검색한 다음 이 블록에서 행 034-000527을 검색합니다.
  3. 블록 88을 검색한 다음 이 블록에서 행 088-000285 및 088-000632를 검색합니다.

이 예에서 보듯이 블록은 5번이 아니라 3번만 가져오기 때문에 Disk의 블록 읽기 수가 감소했습니다. 일부 블록은 두 번 이상이 아닌 한 번만 읽기도 했습니다.

언급URL : https://stackoverflow.com/questions/36957028/difference-between-table-access-by-index-rowid-batched-and-table-access-by-index

반응형