A.5-2 (SQL Server) Operations
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/sql-server/operations
ㄴSQLServer Operations
이 섹션에서는 마이크로소프트 SQL 서버 데이터베이스의 가장 일반적인 실행 계획 작업에 대해 설명합니다.
Microsoft’s documentation 에서도 볼 수 있습니다.
Index and Table Access
SQL Server에는 간단한 용어가 있습니다. "Scan" 작업은 전체 인덱스 또는 테이블을 읽는 반면, "Seek" 작업은 B-트리 또는 실제 주소 (RID, like Oracle ROWID)를 사용하여 인덱스 또는 테이블의 특정 부분에 액세스합니다.
Index Seek, Clustered Index Seek
Index Seek performs는 B-tree traversal하고 리프 노드를
통과하여 일치하는 모든 항목을 찾습니다.
“Anatomy of an SQL Index”도 참조하십시오.
Index Scan, Clustered Index Scan
전체 인덱스(모든 행)를 인덱스 순서로 읽습니다. 데이터베이스는 다양한 시스템 통계에 따라 인덱스 순서의 모든 행이 필요한 경우(예: 해당 order by 절 때문에) 이 작업을 수행할 수 있습니다.
Key Lookup (Clustered)
클러스터된 인덱스에서 단일 행을 검색합니다. 이것은 Index-Organized-Table (IOT)의 Oracle INDEX UNIQUE SCAN과 비슷합니다.
“Clustering Data”을 참조하십시오.
RID Lookup (Heap)
테이블에서 단일 행(예: Oracle TABLE ACCESS BY INDEX ROWID)을 검색합니다.
“Anatomy of an SQL Index”도 참조하십시오.
Table Scan
이를 전체 테이블 검색이라고도 합니다. 디스크에 저장된 전체 테이블(모든 행 및 열)을 읽습니다. 멀티 블록 읽기 작업은 테이블 스캔 속도를 상당히 향상시킬 수 있지만 여전히 가장 비용이 많이 드는 작업 중 하나입니다. 테이블 검색은 높은 IO 속도 외에도 상당한 양의 CPU 시간을 소비할 수 있도록 모든 테이블 행을 검사해야 합니다.
“Full Table Scan”도 참조하십시오.
Joins
일반적으로 조인 작업은 한 번에 두 개의 테이블만 처리합니다. 쿼리에 조인이 더 많은 경우, 조인은 순차적으로 실행됩니다. 처음 두 테이블, 다음 테이블의 중간 결과입니다. 따라서 조인의 맥락에서 "table" 라는 용어는 "intermediate result"를 의미할 수도 있습니다.
Nested Loops
한 테이블에서 결과를 가져오고 첫 번째 테이블에서 각 행에 대해 다른 테이블을 쿼리하여 두 테이블을 조인합니다. 또한 SQL Server는 nested loops 작업을 사용하여 인덱스 액세스 후 테이블 데이터를 검색합니다.
“Nested Loops”도 참조하십시오.
Hash Match
해시 매치 조인은 조인의 한 쪽에서 후보 레코드를 해시 테이블로 로드한 다음 조인의 다른 쪽에서 각 행을 검색합니다.
“Hash Join”을 참조하십시오.
Merge Join
병합 조인은 두 개의 정렬된 목록을 지퍼처럼 결합합니다. 접합부의 양쪽을 모두 보호해야 합니다.
“Sort Merge”도 참조하십시오.
Sorting and Grouping
Sort
order by 절에 따라 결과를 정렬합니다. 이 작업은 중간 결과 (not pipelined)를 구현하기 위해 많은 양의 메모리가 필요합니다.
“Indexing Order By”을 참조하십시오.
Sort (Top N Sort)
order by 절에 따라 결과의 하위 집합을 정렬합니다. pipelined 실행이 불가능한 경우 top-N 쿼리에 사용됩니다.
“Querying Top-N Rows”도 참조하십시오.
Stream Aggregate
group by 값에 따라 사전 정렬된 집합을 집계합니다. 이 작업은 중간 결과를 버퍼링하지 않으며 pipelined 데이터베이스에서 실행됩니다.
“Indexing Group By”을 참조하십시오.
Hash Match (Aggregate)
해시 테이블을 사용하여 결과를 그룹화합니다. 이 작업은 중간 결과 (not pipelined)를 구현하기 위해 많은 양의 메모리가 필요합니다. 출력이 의미 있는 방식으로 정렬되지 않았습니다.
“Indexing Group By”을 참조하십시오.
Top-N Queries
Top
원하는 수의 행을 가져온 경우 기본 작업을 중단합니다.
“Querying Top-N Rows”도 참조하십시오.
top-N 프로토콜의 효율성은 기본 작업의 실행 모드에 따라 달라집니다. 정렬과 같은 non-pipelined 작업을 중단할 때는 매우 비효율적입니다.