use-the-index-luke 저자 Markus Winand
Markus Winand는 SQL에 대한 통찰력을 제공하고 다양한 시스템이 SQL을 지원하는 방법을 modern-sql.com 에서 보여줍니다. 이전에 그는 use-the-index-luke.com 을 만들었는데, 지금도 활발하게 유지되고 있습니다. Markus는 winand.at 를 통해 강사, 연사 및 컨설턴트로 고용될 수 있습니다.
You can upload a Korean translation of use-the-index-luke.com on your blog
Thank you from the bottom of my heart to author Makus Winand for allowing me.
These are translations that I use for studying by using a papago (google translate)
The translations may not be correct or there may be a typo.
I'd appreciate it if you could point it out in the comments.
use-the-index-luke.com 의 한글번역본을 블로그에 업로드 해도 된다고
허락해주신 Makus Winand 저자님께 진심으로 감사합니다.
이 번역본들은 제가 공부용도로 번역기(papago, google transrate)를 돌려서
번역한 내용들이라 맞지 않거나, 오타가 있을수 있습니다.
댓글로 지적해주시면 감사하겠습니다.
https://use-the-index-luke.com/sql/explain-plan/oracle/operations
ㄴOracle Operations
실행 계획 작업에서 개인적으로 가장 선호하는 리소스는
하지만 그것은 다른 관점으로 봐야합니다.
Index and Table Access
INDEX UNIQUE SCAN
INDEX UNIQUE SCAN은 B-tree travelsal만 수행합니다.
데이터베이스는 고유한 제약 조건으로 검색 기준이 둘 이상의 항목과 일치하지 않을 경우 이 작업을 사용합니다.
Chapter1, “Anatomy of an SQL Index”.도 참조하십시오.
INDEX RANGE SCAN
INDEX RANGE SCAN은 B-tree travelsal을 수행하고 leaf node chain을 따라 일치하는 모든 항목을 찾습니다.
Chapter1, “Anatomy of an SQL Index”도 참조하십시오.
소위 Index filter predicate는 종종 INDEX RANGE SCAN의 성능 문제를 야기합니다. 다음 섹션에서는 이러한 항목을 식별하는 방법을 설명합니다.
INDEX FULL SCAN
전체 인덱스(모든 행)를 인덱스 순서대로 읽습니다.
데이터베이스는 다양한 시스템 통계에 따라 모든 행을 인덱스 순서로 지정해야하는 경우(예: 해당 order by 절의 값 때문에) 이 작업을 수행할 수 있습니다.
대신 Optimizer는 INDEX FAST FULL SCAN을 사용하여 추가 정렬 작업을 수행할 수도 있습니다.
Chapter6, “Sorting and Grouping”를 참조하십시오.
INDEX FAST FULL SCAN
디스크에 저장된 전체 인덱스(모든 행)를 읽습니다.
이 작업은 일반적으로 모든 필수 열을 인덱스에서 사용할 수 있는 경우 전체 테이블 검색 대신 수행됩니다.
TABLE ACCESS FULL 과 마찬가지로 INDEX FAST FULL SCAN은 멀티블록 읽기 작업의 이점을 누릴 수 있습니다.
Chapter5, “Clustering Data”를 참조하십시오.
TABLE ACCESS BY INDEX ROWID
이전 인덱스 조회에서 검색된 ROWID를 사용하여
테이블에서 행을 검색합니다.
Chapter1, “Anatomy of an SQL Index” 참조
TABLE ACCESS FULL
이를 전체 테이블 검색이라고도 합니다.
디스크에 저장된 전체 테이블(모든 행 및 열)을 읽습니다.
다중 블록 읽기 작업이 전체 테이블 검색 속도를 크게 향상시키지만 여전히 가장 비용이 많이 드는 작업 중 하나입니다. 높은 IO 속도 외에도 전체 테이블 검색은 상당한 양의 CPU 시간을 소비할 수 있도록 모든 테이블 행을 검사해야합니다.
Joins
일반적으로 조인 작업은 한 번에 두 개의 테이블만 처리합니다. 쿼리에 조인이 더 많은 경우, 조인은 순차적으로 실행됩니다. 처음 두 테이블, 다음 테이블의 중간 결과입니다. 따라서 조인의 맥락에서 "테이블"이라는 용어는 "중간 결과"를 의미할 수도 있습니다.
NESTED LOOPS JOIN
한 테이블에서 결과를 가져오고 첫 번째 테이블에서 각 행에 대한 다른 테이블을 쿼리하여 두 테이블을 조인합니다.
HASH JOIN
해시 조인은 조인의 한 쪽에서 후보 레코드를 해시 테이블로 로드한 다음 조인의 다른 쪽에서 각 행을 검색합니다.
“Hash Join” 참조
MERGE JOIN
병합 조인은 두 개의 정렬된 목록을 지퍼처럼 결합합니다. 접합부의 양쪽을 모두 보호해야 합니다.
“Sort Merge”도 참조하십시오.
Sorting and Grouping
SORT ORDER BY
order by 절에 따라 결과를 정렬합니다.
이 작업은 파이프라인이 아닌 중간 결과를 구현하기 위해 많은 양의 메모리가 필요합니다. "색인 순서 기준"을 참조하십시오.
SORT ORDER BY STOPKEY
order by 순서에 따라 결과의 하위 집합을 정렬합니다.
파이프라인 실행이 불가능한 경우 top-N에 사용됩니다.
“Querying Top-N Rows”를 참조하십시오.
SORT GROUP BY
group by 열의 결과 집합을 정렬하고 두번째 단계에서 정렬된 결과를 집계합니다.
이 작업은 파이프라인이 아닌 중간 결과 집합을 구체화하기 위해 많은 양의 메모리가 필요합니다.
SORT GROUP BY NOSORT
group by 값에 따라 사전 정렬된 집합을 집계합니다.
이 작업은 중간 결과를 버퍼링 하지 않습니다.
파이프라인 방식으로 실행됩니다.
HASH GROUP BY
hash table을 사용하여 결과를 그룹화합니다.
이 작업은 파이프라인이 아닌 중간 결과 집합을 구체화하기 위해 많은 양의 메모이가 필요합니다.
출력이 의미 있는 방식으로 정렬되지 않았습니다.
Top-N Queries
상위 N개 쿼리의 효율성은 기본 작업의 실행 모드에 따라 달라집니다. SORT ORDER BY 와 같은 비파이프라인 방식을 중단할 때는 매우 비효율적입니다.
COUNT STOPKEY
원하는 행 수를 가져올 때 기본 작업을 중단합니다.
WINDOW NOSORT STOPKEY
원하는 수의 행을 가져올 때 window function(over 절)
을 사용하여 실행을 중단합니다.
'use-the-index-luke' 카테고리의 다른 글
A.4 PostgreSQL (1) | 2023.12.26 |
---|---|
A.3-3 (Oracle) Access vs. filter predicates (0) | 2023.12.22 |
A.3-1 (Oracle) Getting (1) | 2023.12.15 |
A.3 Oracle (0) | 2023.12.13 |
A.2-3 (MySQL) Access vs. filter predicates (0) | 2023.12.11 |