인덱스 rowid BATCHED에 의한 테이블 액세스와 인덱스 rowid에 의한 테이블 액세스 간의 차이
사용 중EXPLAIN PLAN
Oracle 데이터베이스의 단순한 환경에서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은 인덱스에 의해 결정된 순서대로 행을 검색합니다.
- 블록 15를 검색한 다음 이 블록에서 행 015-000123을 검색합니다.
- 블록 34를 검색한 다음 이 블록에서 행 034-000527을 검색합니다.
- 블록 88을 검색한 다음 이 블록에서 행 088-000285를 검색합니다.
- 블록 15(다시)를 검색한 다음 이 블록에서 행 015-000889를 검색합니다.
- 블록 88을 다시 검색한 다음 이 블록에서 행 088-000632를 검색합니다.
일괄 처리 방식에서 오라클은 인덱스에서 몇 개의 항목을 검색한 다음 먼저 블록 수에 따라 정렬한 다음 블록 수에 따라 결정된 순서대로 항목을 처리합니다.
- 블록 15를 검색한 다음 이 블록에서 행 015-000123 및 015-000889를 검색합니다.
- 블록 34를 검색한 다음 이 블록에서 행 034-000527을 검색합니다.
- 블록 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
'sourcetip' 카테고리의 다른 글
Spring Boot MongoDB에서 텍스트 검색이 작동하지 않습니다. (0) | 2023.08.06 |
---|---|
CSS 클래스를 <%=f.cisco %>에 추가합니다. (0) | 2023.08.06 |
모듈 __file__ 특성이 절대적입니까, 상대적입니까? (0) | 2023.08.06 |
Spring boot에서 "ConditionalOnProperty is exclusive"를 어떻게 수정합니까? (0) | 2023.08.06 |
AJAX 요청 후 위쪽으로 스크롤 중지 (0) | 2023.08.01 |