본문 바로가기

wow db Log/ms-sql

[MSSQL] SQL Server 2005 실행 계획 아이콘 설명

SQL Server Management Studio 그래픽 실행 계획에 표시된 다음 아이콘은 SQL Server 에서 문을 실행하기 위해 사용하는 연산자를 나타냅니다.

아이콘
연산자

SQL Server 2000에만 해당

Arithmetic Expression 연산자는 한 행의 기존 값에서 새 값을 계산합니다.

Assert 연산자는 조건을 확인합니다. 예를 들어 참조 무결성을 확인하거나 스칼라 하위 쿼리에서 한 개의 행을 반환하게 합니다. Assert 연산자는 각 입력 행에 대해 Argument 열의 식을 계산합니다. 이 식이 NULL이면 Assert 연산자를 통해 행이 전달됩니다. 이 식이 NULL이 아니면 해당 오류가 발생합니다.

SQL Server 는 조인 레코드를 만들 수 없는 키 값을 가진 행을 제거하여 쿼리 실행 속도를 높이기 위해 내부적으로 bitmap을 사용합니다. SQL Server 는 병렬 쿼리 계획에만 이러한 bitmap을 사용합니다.

Bookmark Lookup 연산자는 책갈피(행 ID 또는 클러스터링 키)를 사용하여 테이블이나 클러스터형 인덱스에서 해당 행을 조회합니다. Argument 열에는 테이블이나 클러스터형 인덱스에서 행을 조회할 때 사용하는 책갈피 레이블이 포함됩니다. Argument 열에는 행을 조회하는 테이블 또는 클러스터형 인덱스의 이름도 포함됩니다. WITH PREFETCH 절이 Argument 열에 나타나는 경우에 쿼리 프로세서에서는 테이블 또는 클러스터형 인덱스에서 책갈피를 조회할 때 비동기 사전 인출(미리 읽기)을 사용하는 것을 최적의 방법으로 결정합니다. Bookmark Lookup은 SQL Server 2005에서는 사용되지 않습니다. 대신, Clustered Index Seek 및 RID Lookup에서 책갈피 조회 기능을 제공합니다.

Clustered Index Delete 연산자는 Argument 열에 지정된 클러스터형 인덱스에서 행을 삭제합니다. WHERE:() 조건자가 Argument 열에 있으면 조건자에 부합되는 행만 삭제됩니다.

Clustered Index Insert 연산자는 해당 입력의 행을 Argument 열에 지정된 클러스터형 인덱스에 삽입합니다. Argument 열에는 각 열의 설정 값을 나타내는 SET:() 조건자도 포함됩니다. Clustered Index Insert에 삽입 값에 대한 자식이 없는 경우 삽입된 행을 Insert 연산자 자체에서 가져옵니다.

Clustered Index Scan 연산자는 Argument 열에 지정한 클러스터형 인덱스를 검색합니다. 선택 사항인 WHERE:() 조건자가 있는 경우에는 조건자에 부합되는 행만 반환됩니다. Argument 열에 ORDERED 절이 있으면 쿼리 프로세서가 행의 출력이 클러스터형 인덱스에 의해 정렬되는 순서로 반환되도록 요청한 것입니다. ORDERED 절이 없으면 저장소 엔진에서는 대부분의 경우에 출력을 정렬하지 않고 인덱스를 최적의 방법으로 검색합니다.

Clustered Index Seek 연산자는 인덱스의 검색 기능을 사용하여 클러스터형 인덱스에서 행을 검색합니다.

Argument 열은 사용할 클러스터형 인덱스의 이름과 SEEK:() 조건자를 포함합니다. 저장소 엔진은 이 인덱스를 사용하여 SEEK:() 조건자에 부합되는 행만 처리합니다. 이 열은 또한 SEEK:() 조건자에 부합되는 행에 대해서만 평가를 수행하는 WHERE:() 조건자를 포함할 수 있지만 이는 선택적이며 이 작업을 완료하는 데는 인덱스를 사용하지 않습니다.

Argument 열에 ORDERED 절이 있으면 쿼리 프로세서는 클러스터형 인덱스가 정렬한 순서대로 행을 반환합니다. ORDERED 절이 없으면 저장소 엔진은 출력을 정렬하지 않고 최적의 방법으로 인덱스를 검색합니다. 출력 순서를 유지하는 것보다 정렬하지 않고 출력하는 것이 더 효율적일 수 있습니다.

키워드 LOOKUP을 사용하면 책갈피 조회가 수행됩니다.

Clustered Index Update 연산자는 Argument 열에 지정한 클러스터형 인덱스의 입력 행을 업데이트합니다.

WHERE:() 조건자가 있는 경우에는 조건자에 부합되는 행만 업데이트됩니다. SET:() 조건자가 있는 경우에는 업데이트된 각 열이 이 값으로 설정됩니다. DEFINE:() 조건자가 있는 경우에는 이 연산자가 정의하는 값이 나열됩니다. 이러한 값은 SET 절 또는 이 연산자의 다른 곳과 이 쿼리 내의 다른 곳에서 참조될 수 있습니다.

Collapse 연산자는 업데이트 처리를 최적화합니다. 업데이트 처리는 Split 연산자를 사용하여 삭제와 삽입으로 분리할 수 있습니다. 키 열 목록을 지정하는 GROUP BY:() 절은 Argument 절에 포함됩니다. 쿼리 프로세서가 동일한 키 값을 삭제 및 삽입하는 인접 행을 발견하면 별개의 두 작업을 보다 효율적인 한 개의 업데이트 작업으로 교체합니다.

Compute Scalar 연산자는 식을 계산하여 계산된 스칼라 값을 만듭니다. 이 값은 사용자에 반환되거나 그 외에 쿼리에서 참조되거나 둘 다일 수 있습니다. 예를 들어 두 작업은 모두 필터 조건자 또는 조인 조건자에서 수행됩니다.

Concatenation 연산자는 여러 개의 입력을 검색하고 검색된 각 행을 반환합니다. Concatenation은 일반적으로 Transact-SQL UNION ALL 구조를 구현하는 데 사용됩니다.

Concatenation 물리 연산자에는 두 개 이상의 입력과 한 개의 출력이 있습니다. Concatenation은 첫 번째 입력 스트림에서 출력 스트림으로 튜플을 복사한 다음 이 연산을 각 추가 입력 스트림에 대해 반복합니다.

Constant Scan 연산자는 하나 이상의 상수 행을 쿼리에 사용하며 Compute Scalar 연산자는 Constant Scan 연산자로 만들어진 행에 열을 추가하기 위해 사용되는 경우가 많습니다.

Delete 연산자는 Argument 열의 선택적 조건자에 부합되는 개체 행에서 삭제됩니다.

Deleted Scan 연산자는 트리거 내에서 삭제된 테이블을 검색합니다.

Eager Spool 연산자는 전체 입력을 받아 각 행을 tempdb 데이터베이스에 저장된 숨겨진 임시 개체에 저장합니다. 예를 들어 Nested Loops 연산자로 연산자를 다시 돌리지만 다시 바인딩할 필요는 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용합니다. 다시 바인딩해야 하는 경우에는 스풀된 데이터를 삭제하고 바인딩된 입력을 검색하여 스풀 개체를 다시 작성합니다.

Eager Spool 연산자는 "신속하게" 스풀 파일을 만듭니다. 스풀의 부모 연산자가 첫 번째 행을 요청하면 스풀 연산자는 입력 연산자로부터 모든 행을 받아 스풀에 저장합니다.

Filter 연산자는 입력을 검색하고 Argument 열에 표시되는 필터 식(조건자)에 부합되는 행만 반환합니다.

Hash Match 연산자는 빌드 입력으로부터 각 행에 대한 해시 값을 계산하여 해시 테이블을 작성합니다. HASH:() 조건자는 해시 값을 만들기 위해 사용하는 열 목록과 함께 Argument 열에 포함됩니다. 이 조건자는 각 검색 행에 대해 동일한 해시 함수를 사용하여 해시 값을 계산하고 해시 테이블에서 일치하는 항목을 찾습니다. 잔여 조건자(Argument 열에서 RESIDUAL:()로 식별됨)가 있으면 이 역시 만족해야 일치 항목으로 판단됩니다. 수행되는 논리 연산에 따라 다음과 같이 동작이 달라집니다.

  • 모든 조인에 대해 첫 번째(최상위) 입력을 사용하여 해시 테이블을 작성하고 두 번째(최하위) 입력을 사용하여 해시 테이블을 검색합니다. 출력은 조인 유형으로 지정된 대로 일치(또는 불일치)됩니다. 여러 조인에서 같은 조인 열을 사용하는 경우에는 이러한 연산이 해시 팀으로 그룹화됩니다.
  • distinct 또는 aggregate 연산자에 대해서는 입력을 사용하여 해시 테이블을 작성합니다(중복 요소를 제거하고 모든 집계 식을 계산). 해시 테이블이 작성되면 테이블을 검색하고 모든 항목을 출력합니다.

union 연산자에 대해서는 첫 번째 입력을 사용하여 해시 테이블을 작성합니다(중복 요소 제거). 다음 두 번째 입력(중복 요소가 없어야 함)을 사용하여 해시 테이블을 검색하고 일치되는 항목이 없는 모든 행을 반환한 뒤 해시 테이블을 검색하여 모든 항목을 반환합니다.

SQL Server 2000 전용

Hash Match Root 연산자는 그 바로 아래 모든 Hash Match Team 연산자의 작업을 조정합니다. Hash Match Root 연산자와 바로 아래의 Hash Match Team 연산자는 공통 해시 함수와 분할 전략을 공유합니다. Hash Match Root 연산자는 항상 해당 팀의 멤버가 아닌 연산자로 출력을 반환합니다.

SQL Server 2000에만 해당

Hash Match Team 연산자는 공통 해시 함수와 분할 전략을 공유하는 연결된 해시 연산자 팀의 일부입니다.

Nonclustered Index Delete 연산자는 Argument 열에 지정된 비클러스터형 인덱스에서 입력 행을 삭제합니다.

Index Insert 연산자는 입력으로부터의 행을 Argument 열에 지정된 비클러스터형 인덱스에 삽입합니다. Argument 열에는 각 열의 설정 값을 나타내는 SET:() 조건자도 포함됩니다.

Index Scan 연산자는 Argument 열에 지정한 비클러스터형 인덱스의 모든 행을 검색합니다. 선택 사항인 WHERE:() 조건자가 Argument 열에 나타나면 조건자에 부합되는 행만 반환됩니다.

Argument 열에 ORDERED 절이 있으면 비클러스터형 인덱스에 의해 정렬된 순서로 행이 반환되도록 쿼리 프로세서가 결정한 것입니다. ORDERED 절이 없으면 저장소 엔진에서는 대부분의 경우에 출력을 정렬하지 않고 인덱스를 최적의 방법으로 검색합니다.

Index Seek 연산자는 인덱스 검색 기능을 사용하여 비클러스터형 인덱스에서 행을 검색합니다.

Argument 열에는 사용할 비클러스터형 인덱스의 이름 및 SEEK:() 조건자가 포함됩니다. 저장소 엔진은 인덱스를 사용하여 SEEK:() 조건자에 부합되는 행만 처리합니다. 필요에 따라 저장소 엔진이 SEEK:() 조건자에 부합되는 모든 행에 대한 평가를 수행할 WHERE:() 조건자가 포함될 수도 있습니다(이 수행을 위해 인덱스를 사용하지는 않음).

Argument 열에 ORDERED 절이 있으면 쿼리 프로세서는 클러스터형 인덱스가 정렬한 순서대로 행을 반환합니다. ORDERED 절이 없으면 저장소 엔진이 인덱스를 최적의 방법(출력 정렬은 보장하지 않음)으로 검색합니다. 출력 순서를 유지하는 것보다는 정렬되지 않은 출력을 만드는 것이 더 효율적일 수 있습니다.

Index Spool 물리 연산자는 Argument 열에 SEEK:() 조건자를 포함합니다. Index Spool 연산자는 입력 행을 검색하고 각 행의 복사본을 숨겨진 스풀 파일(tempdb 데이터베이스에 저장되어 쿼리 사용 기간 중에만 존재함)에 배치하며 행에 대해 비클러스터형 인덱스를 작성합니다. 이렇게 하면 인덱스의 검색 기능을 사용하여 SEEK:() 조건자에 부합되는 행만 출력할 수 있습니다.

예를 들어 Nested Loops 연산자로 연산자를 다시 돌리지만 다시 바인딩할 필요가 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용합니다.

Nonclustered Index Update 물리 연산자는 Argument 열에 지정된 비클러스터형 인덱스에 입력된 내용에서 행을 업데이트합니다. SET:() 조건자가 있는 경우 업데이트된 각 열은 이 값으로 설정됩니다. Nonclustered Index Update은 물리 연산자입니다.

Insert 논리 연산자는 입력의 각 행을 Argument 열에 지정된 개체에 삽입합니다. 물리 연산자는 Table Insert, Index Insert 또는 Clustered Index Insert 연산자입니다.

Inserted Scan 연산자는 트리거 내에서 Inserted 테이블을 검색합니다.

그래픽 실행 계획을 생성하는 논리에서 반복자에 적합한 아이콘을 찾지 못하면 캐치올 아이콘이 표시됩니다. 캐치올 아이콘이 반드시 오류 상태를 나타내는 것은 아닙니다.

캐치올 아이콘은 파랑(반복자), 주황(커서) 및 녹색(Transact-SQL 언어 구문)의 세 가지 유형이 있습니다.

Lazy Spool 논리 연산자는 입력된 각 행을 tempdb 데이터베이스에 저장된 숨겨진 임시 개체에 저장합니다. 예를 들어 Nested Loops 연산자 내에서 사용되어 연산자가 반복 실행되지만 다시 바인딩할 필요는 없을 경우, 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용합니다. 다시 바인딩해야 하는 경우에는 스풀된 데이터를 삭제하고 다시 바인딩된 입력을 다시 검색하여 스풀 개체를 다시 작성합니다.

 

Lazy Spool 연산자는 스풀 파일을 "지연" 방식으로 작성합니다. 즉, 스풀의 부모 연산자가 행을 요청할 때마다 스풀 연산자는 한 번에 모든 행을 사용하는 대신 입력 연산자로부터 하나의 행을 받아 스풀에 저장합니다.

Log Row Scan 연산자는 트랜잭션 로그를 검색합니다.

Merge Interval 연산자는 겹칠 수도 있는 여러 개의 간격을 병합하여 최소한의 겹치지 않는 간격을 생성하는데, 이 간격은 인덱스 항목 검색에 사용됩니다. 이 연산자는 주로 이 연산자가 병합하는 간격(행에서 열로 표시됨)을 만드는 Constant Scan 연산자보다 한 개 이상의 Compute Scalar 연산자 위에 나타납니다.

Merge Join 연산자는 inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join 및 합집합 논리 연산을 수행합니다.

Argument 열에서 Merge Join 연산자는 일대다 조인을 수행하는 경우에는 MERGE:() 조건자를 포함하고 다대다 조인을 수행하는 경우에는 MANY-TO-MANY MERGE:() 조건자를 포함합니다. Argument 열에는 연산을 수행하기 위해 사용되는 쉼표로 구분된 열 목록도 포함됩니다. Merge Join 연산자에는 쿼리 계획에 명시적인 정렬 연산을 삽입하여 해당 열을 기준으로 정렬된 2개의 입력이 필요합니다. Merge Join은 명시적인 정렬이 필요하지 않은 경우 예를 들면 데이터베이스에 적합한 B-트리 인덱스가 있거나 병합 조인과 롤업을 통한 그룹화와 같은 여러 개의 연산에 대해 정렬 순서를 사용할 수 있는 경우에 특히 효과적입니다.

Nested Loops 연산자는 내부 조인, 왼쪽 외부 조인, 왼쪽 세미 조인 및 왼쪽 앤티 세미 조인 논리 연산을 수행합니다.

중첩 루프 조인은 일반적으로 인덱스를 사용하여 외부 테이블의 각 행에 대해 내부 테이블을 검색합니다. Microsoft SQL Server 는 내부 입력에 대한 인덱스 검색의 효율을 높이기 위해 예상 비용을 기준으로 외부 입력의 정렬 여부를 결정합니다.

수행 중인 논리 연산에 따라 Argument 열의 조건자(선택 사항)를 충족하는 모든 행이 반환됩니다.

SQL Server 2005 를 사용하면 CREATE, DROP 및 ALTER 인덱스 작업이 온라인 방식으로 수행되므로 인덱스 작업이 진행 중인 동안 사용자가 기본 테이블 데이터를 계속 사용할 수 있습니다. Online Index Insert는 이러한 작업을 구현합니다.

Parameter Table Scan 연산자는 현재 쿼리에서 매개 변수의 역할을 하는 테이블을 검색합니다. 일반적으로 이 연산자는 저장 프로시저 안에서 INSERT 쿼리에 사용합니다.

Remote Delete 연산자는 원격 개체로부터의 입력 행을 삭제합니다.

Remote Insert 연산자는 입력 행을 원격 개체에 삽입합니다.

Remote Query 연산자는 쿼리를 원격 원본으로 전송합니다. 원격 서버로 보내진 쿼리의 텍스트는 Argument 열에 표시됩니다.

Remote Scan 연산자는 원격 개체를 검색합니다. 원격 개체 이름은 Argument 열에 표시됩니다.

Remote Update 연산자는 원격 개체에서 입력 행을 업데이트합니다.

RID Lookup은 제공된 행 식별자를 사용하여 힙을 조회하는 책갈피 조회입니다. Argument 열은 테이블의 행을 조회하는 데 사용되는 책갈피 레이블 및 행을 조회할 테이블의 이름을 포함합니다. RID Lookup은 항상 NESTED LOOP JOIN과 함께 사용됩니다.

Row Count Spool 연산자는 입력을 검색하여 얼마나 많은 행이 있는지 계산하고 데이터는 포함되지 않은 상태로 그 수만큼의 행을 반환합니다. 이 연산자는 행에 포함된 데이터보다는 행 자체의 존재 유무를 검사하는 것이 중요한 경우에 사용합니다. 예를 들어 Nested Loops 연산자는 Left Semi Join 연산을 수행하고 조인 조건자는 내부 입력에 적용되는 경우 Row Count Spool이 Nested Loops 연산자의 내부 입력의 최상위에 배치될 수 있습니다. 그러면 내부의 실제 데이터가 필요하지 않기 때문에 Nested Loops 연산자가 Row Count Spool에 의해 출력되는 행 수를 보고 외부 행의 반환 여부를 결정할 수 있습니다.

Segment는 물리 및 논리 연산자입니다. 이 연산자는 하나 이상의 열 값에 따라 입력 집합을 세그먼트로 나눕니다. 이러한 열은 Segment 연산자의 인수로 표시됩니다. 그런 다음 연산자는 한 번에 한 세그먼트씩 출력합니다.

Sequence 연산자는 광범위한 업데이트 계획을 실행합니다. 각 입력은 위에서 아래 방향으로 차례로 실행됩니다. 각 입력은 대개 서로 다른 개체의 업데이트이며 마지막(최하위) 입력으로부터의 행만 반환됩니다.

SequenceProject는 물리 및 논리 연산자입니다. SequenceProject 연산자는 열을 추가하여 정렬된 집합에 대한 계산을 수행합니다. 이 연산자는 하나 이상의 열 값에 따라 입력 집합을 세그먼트로 나눕니다. 그런 다음 연산자는 한 번에 한 세그먼트씩 출력합니다. 이런 열은 SequenceProject 연산자에서 인수로 표시됩니다.

Microsoft SQL Server 에서 지원하는 네 가지 함수 유형은 RANK, DENSE_RANK, ROW_NUMBER 및 NTILE입니다. SequenceProject는 SequenceProject 및 일반적으로 두 세그먼트가 있는 계획을 생성합니다.

Sort 연산자는 모든 들어오는 행을 정렬합니다. Argument 열에는 이 작업으로 중복 요소가 제거되면 DISTINCT ORDER BY:() 조건자가 포함되거나 정렬될 열의 쉼표로 구분된 목록이 있으면 ORDER BY:() 조건자가 포함됩니다. 열이 오름차순으로 정렬되는 경우에는 ASC 값, 내림차순으로 정렬되는 경우에는 DESC 값이 열의 접두사로 사용됩니다.

Split 연산자는 업데이트 과정을 최적화하는 데 사용됩니다. 즉, 각 업데이트 작업을 삭제 및 삽입 작업으로 분할합니다.

Spool 연산자는 중간 쿼리 결과를 저장합니다.

Stream Aggregate 연산자는 열 집합에 의해 그룹화되며 쿼리가 반환하거나 쿼리의 다른 곳에서 참조되는 집계 식을 하나 이상 계산합니다. 이 연산자를 사용하려면 입력이 그룹 내의 열을 기준으로 정렬되어야 합니다.

Stream Aggregate 연산자가 열에 의해 그룹화되는 경우 GROUP BY:() 조건자와 열 목록이 Argument 열에 나타납니다. Stream Aggregate 연산자가 집계 식을 계산하는 경우 SHOWPLAN_ALL 문으로 출력된 Defined Values 열 또는 그래픽 실행 계획의 Argument 열에 해당 목록이 나타납니다.

Switch는 n 개의 입력을 갖는 특수한 유형의 연결 반복기입니다. 각 Switch 연산자에 식이 연결되어 있습니다. 식의 반환 값(0과 n-1 사이)에 따라 Switch는 적절한 입력 스트림을 출력 스트림으로 복사합니다.

Switch의 용도 중 하나는 TOP 연산자 같은 특정 연산자와 빠른 전진 커서가 관련된 쿼리 계획을 구현하는 것입니다.

Table Delete 물리 연산자는 인수 열에 지정된 테이블에서 행을 삭제합니다.

Table Insert 물리 연산자는 입력의 행을 Argument 열에 지정된 테이블에 삽입합니다. Argument 열에는 각 열의 설정 값을 나타내는 SET:() 조건자도 포함됩니다. Table Insert에 삽입 값에 대한 자식이 없는 경우 삽입된 행을 삽입 연산자 자체에서 가져옵니다.

Table Scan 연산자는 테이블에서 Argument 열에 지정된 모든 행을 검색합니다. WHERE:() 조건자가 Argument 열에 나타나면 조건자에 부합되는 행만 반환됩니다.

Table Spool 연산자는 입력을 검색하고 각 행의 복사본을 숨겨진 스풀 테이블에 배치합니다. 이 스풀 테이블은 tempdb 데이터베이스에 저장되어 쿼리 사용 기간 중에만 존재합니다. 예를 들어 Nested Loops 연산자로 연산자를 다시 돌리지만 다시 바인딩할 필요가 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용합니다.

Table Update 물리 연산자는 Argument 열에 지정된 테이블의 입력 행을 업데이트합니다. SET:() 조건자는 각 업데이트된 열의 값을 결정합니다. 이러한 값은 SET 절 또는 이 연산자의 다른 곳과 이 쿼리 내의 다른 곳에서 참조될 수 있습니다.

테이블 값 함수는 테이블 값 함수(Transact-SQL 또는 CLR)를 계산하고 결과 행을 tempdb에 저장합니다. 부모 반복자에서 행을 요청하면 테이블 값 함수는 tempdb에서 해당 행을 반환합니다.

테이블 값 함수(Transact-SQL 또는 CLR)를 호출하는 쿼리는 테이블 값 함수 반복자로 쿼리 계획을 생성합니다.

SQL Server 2000 에서는 계획 내에서 일정한 매개 변수(테이블 값 함수 자신의 매개 변수)로 테이블 값 함수를 계산하지만 SQL Server 2005 에서는 다른 매개 변수 값으로 테이블 값 함수를 계산할 수 있습니다.

테이블 값 함수 XML 판독기는 매개 변수로 XML BLOB를 입력받아 XML 문서 내의 순서대로 XML 노드를 나열한 행 세트를 만듭니다. 다른 입력 매개 변수를 사용하여 XML 문서의 일부만 반환하도록 XML 노드를 제한할 수도 있습니다.

XPath 필터를 갖춘 테이블 값 함수 XML 판독기는 특수한 유형의 XML 판독기 테이블 값 함수로서 XPath 식을 만족하는 XML 노드로 출력을 제한합니다.

Top 연산자는 입력을 검색하고 정렬 순서 등을 기준으로 행의 지정된 첫째 번호나 백분율만 반환합니다. Argument 열에는 타이를 검사할 열 목록이 포함될 수 있습니다. 업데이트 계획에서는 행 개수 제한을 보장하기 위해 Top 연산자를 사용합니다.

확장 연산자(UDX)는 SQL Server 에서 여러 XQuery 및 XPath 연산 중 하나를 구현합니다. 모든 UDX 연산자는 논리/물리 연산자입니다.

확장 연산자(UDX) FOR XML은 XML 표현으로 입력되는 관계형 행 집합을 하나의 BLOB 열에 직렬화하여 한 행으로 출력합니다. 이 연산자는 입력 순서에 따라 결과가 달라지는 XML 집계 연산자입니다.

확장 연산자(UDX) XML SERIALIZER는 입력 순서에 따라 결과가 달라지는 XML 집계 연산자입니다. 이 연산자는 XML 문서 순서대로 입력된 XML 노드 또는 XQuery 스칼라 행을 하나의 XML BLOB 열로 직렬화하여 한 XML 행으로 출력합니다.

확장 연산자(UDX) XML FRAGMENT SERIALIZER는 XQuery 삽입 데이터 수정 확장에 삽입되는 XML 조각 입력 행을 처리하는 데 사용되는 특별한 유형의 XML SERIALIZER입니다.

확장 연산자(UDX) XQUERY STRING은 XML 노드로 입력된 입력 행의 XQuery 문자열 값을 계산합니다. 이 연산자는 입력 순서에 따라 결과가 달라지는 문자열 집계 연산자입니다. 입력된 문자열 값을 포함하는 XQuery 스칼라를 한 행으로 출력합니다.

확장 연산자(UDX) XQUERY LIST DECOMPOSER는 XQuery 목록 분해 연산자입니다. 이 연산자는 XML 노드를 입력받아 각 행의 입력이 XSD 목록 유형인 경우 목록 요소 값을 포함하는 XQuery 스칼라를 각각 하나 이상의 행으로 생성합니다.

확장 연산자(UDX) XQUERY DATA는 XML 노드를 입력받아 입력 값에 대한 XQuery fn:data() 함수를 계산합니다. 이 연산자는 입력 순서에 따라 결과가 달라지는 문자열 집계 연산자입니다. fn:data()의 결과를 포함하는 XQuery 스칼라를 열로 구성한 하나의 행을 출력합니다.

확장 연산자(UDX) XQUERY CONTAINS는 XML 노드를 입력받아 입력 값에 대한 XQuery fn:contains() 함수를 계산합니다. 이 연산자는 입력 순서에 따라 결과가 달라지는 문자열 집계 연산자입니다. fn:contains()의 결과를 포함하는 XQuery 스칼라를 열로 구성한 하나의 행을 출력합니다.

확장 연산자 UPDATE XML NODE는 XML 유형에 대한 modify() 메서드로 XQuery 대체 데이터 수정 확장의 XML 노드를 업데이트합니다.

Update 연산자는 Argument 열에 지정된 개체의 입력 내용에 따라 각 행을 업데이트합니다. 물리 연산자는 Table Update, Index Update 또는 Clustered Index Update입니다.

 

그래픽실행계획에표시되는다음아이콘은 SQL Server 에서문을실행하기위해사용하는논리물리연산자를나타냅니다.

아이콘

커서 물리 연산자

그래픽 실행 계획을 생성하는 논리에서 반복자를 위한 적합한 아이콘을 찾을 수 없으면 캐치올 아이콘이 표시됩니다. 캐치올 아이콘이 오류 상태를 나타내는 것은 아닙니다.
Dynamic 연산자는 다른 커서가 변경한 모든 내용을 볼 수 있는 커서를 사용합니다.
Fetch Query 연산자는 커서에 대해 인출이 실행될 때 행을 검색합니다.
Keyset 연산자는 다른 사용자의 업데이트 내용은 볼 수 있지만 삽입 내용은 볼 수 없는 커서를 사용합니다.
Population Query 연산자는 커서가 열려 있을 때 커서의 작업 테이블을 채웁니다.
Refresh Query 연산자는 인출 버퍼에서 행에 대한 현재 데이터를 인출합니다.
Snapshot 연산자는 다른 연산자가 만든 변경 내용을 확인하지 않는 커서를 만듭니다.

그래픽실행계획에표시되는다음아이콘은 SQL Server 에서문을실행하기위해사용하는물리연산자를나타냅니다.

아이콘

병렬 처리 물리 연산자

Distribute Streams 연산자는 병렬 쿼리 계획에서만 사용됩니다. Distribute Streams 연산자는 레코드의 단일 입력 스트림을 사용하여 여러 개의 출력 스트림을 만듭니다. 레코드 내용과 형식은 변경되지 않습니다. 입력 스트림의 각 레코드는 출력 스트림 중 하나에 표시됩니다. 이 연산자는 입력 레코드의 상대적인 순서를 출력 스트림에서 자동으로 유지합니다. 대개 특정 입력 레코드가 어떤 출력 스트림에 포함될지 결정하는 데는 해시가 사용됩니다.
출력이 분할되는 경우에는 Argument 열에 PARTITION COLUMNS:() 조건자와 분할 열이 포함됩니다.
Repartition Streams 연산자는 여러 개의 스트림을 사용하며 여러 개의 레코드 스트림을 만듭니다. 레코드 내용과 형식은 변경되지 않습니다. 입력 스트림의 각 레코드가 한 개의 출력 스트림에 배치됩니다. 이 연산자가 순서를 그대로 유지하는 경우에는 모든 입력 스트림이 정렬되어 여러 개의 정렬된 출력 스트림으로 병합되어야 합니다.
출력이 분할되는 경우에는 Argument 열에 PARTITION COLUMNS:() 조건자와 분할 열이 포함됩니다.
출력이 정렬되는 경우에는 Argument 열에 ORDER BY:() 조건자와 정렬될 열이 포함됩니다.
Repartition Streams는 논리 연산자입니다. 이 연산자는 병렬 쿼리 계획에서만 사용됩니다.
Gather Streams 연산자는 병렬 쿼리 계획에서만 사용됩니다. Gather Streams 연산자는 몇 개의 입력 스트림을 사용하고 해당 입력 스트림을 결합하여 레코드의 단일 출력 스트림을 만듭니다. 레코드 내용과 형식은 변경되지 않습니다. 이 연산자가 순서를 그대로 유지하는 경우에는 모든 입력 스트림이 정렬되어야 합니다.
출력이 정렬되는 경우에는 Argument 열에 ORDER BY:() 조건자와 정렬될 열 이름이 포함됩니다.

그래픽실행계획에표시되는다음아이콘은 SQL Server 에서사용하는 Transact-SQL 언어요소를나타냅니다.

아이콘

언어 요소

Assign 연산자는 식 값 또는 상수 값을 변수에 할당합니다.
Convert 연산자는 스칼라 데이터 형식을 다른 형식으로 변환합니다.
Declare 연산자는 로컬 변수를 할당합니다.
If 연산자는 식을 기준으로 조건부 처리를 수행합니다.
Intrinsic 연산자는 내부 Transact-SQL 함수를 호출합니다.
그래픽 실행 계획을 만드는 논리에서 반복자에 적합한 아이콘을 찾을 수 없으면 캐치올 아이콘이 표시됩니다. 캐치올 아이콘이 반드시 오류 상태를 나타내는 것은 아닙니다.
Result 연산자는 쿼리 계획의 끝에 반환되는 데이터입니다. 이는 일반적으로 실행 계획의 루트 요소입니다.
While은 Transact-SQL while 루프를 구현합니다.