use-the-index-luke

A.5-2 (SQL Server) Operations

kim-jiyoung 2024. 1. 11. 20:25

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

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/32002c57-bef5-4885-9fa6-0047a1a68738/resource_2

Index Seek performs는 B-tree traversal하고 리프 노드를

통과하여 일치하는 모든 항목을 찾습니다.

“Anatomy of an SQL Index”도 참조하십시오.

Index Scan, Clustered Index Scan

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/e0184155-7a39-4ff8-84bc-562d38d489aa/resource_3

전체 인덱스(모든 행)를 인덱스 순서로 읽습니다. 데이터베이스는 다양한 시스템 통계에 따라 인덱스 순서의 모든 행이 필요한 경우(예: 해당 order by 절 때문에) 이 작업을 수행할 수 있습니다.

Key Lookup (Clustered)

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/bb9273a2-9461-4c65-848a-d1dae12861f5/resource_4

클러스터된 인덱스에서 단일 행을 검색합니다. 이것은 Index-Organized-Table (IOT)의 Oracle INDEX UNIQUE SCAN과 비슷합니다.

“Clustering Data”을 참조하십시오.

RID Lookup (Heap)

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/f83fb125-cd6f-4b3d-a833-d840a62c2310/resource_5

테이블에서 단일 행(예: Oracle TABLE ACCESS BY INDEX ROWID)을 검색합니다.

“Anatomy of an SQL Index”도 참조하십시오.

Table Scan

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/7bd74233-e00c-4d2d-b27d-d71c10b25140/resource_6

이를 전체 테이블 검색이라고도 합니다. 디스크에 저장된 전체 테이블(모든 행 및 열)을 읽습니다. 멀티 블록 읽기 작업은 테이블 스캔 속도를 상당히 향상시킬 수 있지만 여전히 가장 비용이 많이 드는 작업 중 하나입니다. 테이블 검색은 높은 IO 속도 외에도 상당한 양의 CPU 시간을 소비할 수 있도록 모든 테이블 행을 검사해야 합니다.

“Full Table Scan”도 참조하십시오.

Joins


일반적으로 조인 작업은 한 번에 두 개의 테이블만 처리합니다. 쿼리에 조인이 더 많은 경우, 조인은 순차적으로 실행됩니다. 처음 두 테이블, 다음 테이블의 중간 결과입니다. 따라서 조인의 맥락에서 "table" 라는 용어는 "intermediate result"를 의미할 수도 있습니다.

Nested Loops

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/bc22b742-5068-44ad-9320-cf4c0af4bdd9/resource_7

한 테이블에서 결과를 가져오고 첫 번째 테이블에서 각 행에 대해 다른 테이블을 쿼리하여 두 테이블을 조인합니다. 또한 SQL Server는 nested loops 작업을 사용하여 인덱스 액세스 후 테이블 데이터를 검색합니다.

“Nested Loops”도 참조하십시오.

Hash Match

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/9a075b47-d543-4864-ab5f-2741acfdea9b/resource_8

해시 매치 조인은 조인의 한 쪽에서 후보 레코드를 해시 테이블로 로드한 다음 조인의 다른 쪽에서 각 행을 검색합니다.

“Hash Join”을 참조하십시오.

Merge Join

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/06e1b826-a9c7-49ad-a555-d6426742e3d3/resource_9

병합 조인은 두 개의 정렬된 목록을 지퍼처럼 결합합니다. 접합부의 양쪽을 모두 보호해야 합니다.

“Sort Merge”도 참조하십시오.

Sorting and Grouping


Sort

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/c2a839f7-261a-4762-926f-6562d587f717/resource_10

order by 절에 따라 결과를 정렬합니다. 이 작업은 중간 결과 (not pipelined)를 구현하기 위해 많은 양의 메모리가 필요합니다.

“Indexing Order By”을 참조하십시오.

Sort (Top N Sort)

order by 절에 따라 결과의 하위 집합을 정렬합니다. pipelined 실행이 불가능한 경우 top-N 쿼리에 사용됩니다.

“Querying Top-N Rows”도 참조하십시오.

Stream Aggregate

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/30864202-61ad-4c5d-b10a-947aa4655c8f/resource_11

group by 값에 따라 사전 정렬된 집합을 집계합니다. 이 작업은 중간 결과를 버퍼링하지 않으며 pipelined 데이터베이스에서 실행됩니다.

“Indexing Group By”을 참조하십시오.

Hash Match (Aggregate)

https://prod-files-secure.s3.us-west-2.amazonaws.com/b8c9890e-187a-4d96-9a74-adbfa05b6d4f/6c42f956-6436-4e7c-b0c3-0e927923a346/resource_12

해시 테이블을 사용하여 결과를 그룹화합니다. 이 작업은 중간 결과 (not pipelined)를 구현하기 위해 많은 양의 메모리가 필요합니다. 출력이 의미 있는 방식으로 정렬되지 않았습니다.

“Indexing Group By”을 참조하십시오.

Top-N Queries


Top

원하는 수의 행을 가져온 경우 기본 작업을 중단합니다.

“Querying Top-N Rows”도 참조하십시오.

top-N 프로토콜의 효율성은 기본 작업의 실행 모드에 따라 달라집니다. 정렬과 같은 non-pipelined 작업을 중단할 때는 매우 비효율적입니다.