본문 바로가기

MS SQL Server/Optimizing

실행 계획에서 볼 수 있는 연산자(Operator) 정리 Vol. 1

안녕하세요 ^^.

Daily-SQL 블로그의 차태욱입니다.

제가 공부 하고 있는 SQL Server 스터디인 SQL Start에서 진행했던 스터디 중 실행계획 발표를 위해 준비했던, Operator 에 대한 정리입니다 ^^

도움이 되었으면 좋겠네요 !

혹시 틀린것이 있거나, 제가 잘못 해석한것이 있다면, 댓글로 남겨주시면, 시정하고, 수정내역 남기도록 하겠습니다 ^^.

===================================================
실행 계획에서 볼 수 있는 연산자(Operator) 정리 Vol. 1

1. Insert
Insert 논리 연산자는 계산된, 혹은 입력된 값을 지정된 열에 지정된 개체에 삽입합니다.
            Insert.1 – 테이블에 Clustered Index가 없는 경우
                                   
            Insert.2- 테이블에 Clustered Index가 있는 경우
                                    


2. Clustered Index Insert
Clustered Index Insert 실행 계획 연산자는 입력된 값을 클러스터형 인덱스에 삽입합니다.

 

3. Top
  Top 연산자는 지정된 정렬 순서 등을 기준으로 하여, 지정된 개수만큼의 행을 반환합니다.

Top.1

   

4. Index Seek

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

         주로 Seek을 하기에 적합한 Where 조건자를 입력 하였거나, Join을 위한 조건열이 인덱스로

    잘 구성 되어있을 때 볼 수 있습니다.

Index Seek.1 Where 조건자를 검색하기 위한 Index Seek

Index Seek.2 Join을 위한 Index Seek

 

5. Segment
 Segment 연산자는 하나 이상의 열 값에 따라 입력 집합을 Segment(부분)로 나눕니다.
         그런 다음 연산자는 한 번에 한 Segment(부분)씩 출력합니다.

          저의 실행계획에서는 ROW_NUMBER()를 구하는 과정에서 나왔습니다.    
  Segment.1

 

 

6. Sequence Project(Compute Scalar)

Sequence Project(Compute Scalar) 연산자는 정렬된 집합에 대한 계산을 수행합니다.
이 연산자는 하나 이상의 열 값에 따라 입력 집합을 Segment(부분)으로 나누고,
한 번에 한 Segment(부분)씩 출력합니다.
저의 실행계획에서는 ROW_NUMBER()를 구하는 과정에서 나왔습니다.

 

 

 

7. Filter

Filter 연산자는 입력을 검색하고 Argument 열에 표시되는 필터 식(조건자)에 부합되는
         행만
반환합니다.
         저의 실행 계획에서는 페이징을 위한
Row_Number() 산출 후 범위 지정하는 
         Where문 때문에 발생 하였습니다.

 Filter.1

8. Clustered Index Seek
 Index Seek(Clustered) 연산자는 인덱스 검색 기능을 사용하여 클러스터형 인덱스에서 행을
         검색합니다. Argument 열에는 사용할 클러스터형 인덱스의 이름 및 SEEK 조건자가 있습니다.

 

9. Nested Loops

Nested Loops (중첩 루프 조인) 연산자는
        -내부 조인(Inner Join),

        -왼쪽 우선 외부 조인(Left Outer Join),

        -왼쪽 세미 조인(Left Semi Join) 및

        -왼쪽 앤티 세미조인(Left anti semi join) 논리 연산을 수행합니다.
         중첩 루프 조인은 일반적으로 인덱스를 사용하여 외부 테이블의 각 행에 대해 내부 테이블을
         검색합니다.

        Microsoft SQL Server는 내부 입력에 대한 인덱스 검색의 효율을 높이기 위해 예상 비용을

        기준으로 외부 입력의 정렬 여부를 결정합니다.

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

반환됩니다.

Nested Loops.1 테이블에 아무런 인덱스도 없는 경우

Nested Loops.2 조인 조건 열이 클러스터드 인덱스로 구성 된 경우

 

 

 

 

10. Compute Scalar

Compute Scalar 연산자는 식을 계산하여 계산된 스칼라(방향의 구별은 없고, 하나의 수치로 완전히 표시 되어지는 양) 값을 만듭니다. 이 값은
-사용자에 반환되거나
-그 외에 쿼리에서 참조되거나
-둘 다일 수 있습니다.

 

  Compute Scalar.1   SeqNo*2를 하기 위한 과정의 Compute Scalar

 

11. Concatenation

 

      Concatenation 연산자는 여러 개의 입력을 검색하고 검색된 각 행을 반환합니다.      
     Concatenation
은 일반적으로 Transact-SQL UNION ALL 구조를 구현하는 데 사용됩니다. 
     Concatenation 연산자에는 두 개 이상의 입력과 한 개의 출력이 있습니다.
       Concatenation은 첫 번째 입력 Stream
       (흐름 데이터 세트 간에서 데이터의 전송이 실행 되고 있는 것)
       에서 출력 Stream 으로 행을 복사한 다음 이 연산을 각 추가 입력 스트림에 대해 반복합니다.

     ->SSMS 설명>여러 입력 테이블을 추가하여 출력 테이블을 구성합니다.

 

  Concatenation.1 두 개의 쿼리를 UNOIN 하기 위한 Concatenation

 

12. Sort

Sort 연산자는 모든 들어오는 행을 정렬합니다. 
         Sort 작업으로 인해 중복요소가 제거 되면, Argument 열에 
         DISTINCT 혹은 ORDER BY 조건자가 포함 되며,
         ASC나 DESC 정렬되는 경우에는 ASC나 DESC값이
         Argument열의 접두사로 포함 되어 집니다.

 

13. Table Valued Function

Table Valued Function 연산자는 테이블 반환 함수를 계산하고,
         결과 행을 [tempdb]에 저장합니다..
         부모 반복자 (Node Id가 Parent에 해당하는) 에서 행을 요청하면 
        
테이블 반환 함수는 [tempdb]에서 해당 행을 반환합니다.
         SSMS 그래픽 실행계획에서는
테이블 반환 함수입니다. 라고 설명하고 있습니다.

 

14. Merge Join

Merge Join 연산자는 (일반적으로 Inner 혹은 Outer)조인 및 합집합(Union) 논리 연산을 
         수행합니다.
         Merge Join은 명시적인 정렬이 필요하지 않은 경우 
           -예를 들면 데이터베이스에 Merge Join에 적합한 인덱스가 있는 경우에 
         특히 효과적입니다.   
            
             Merge Join.1 정렬이 잘 되어 있는 경우     

Merge Join.2 Join대상 테이블에 정렬이 되어 있지 않은 경우 
                              – Sort
하는 과정을 거칩니다

 

 

15. Stream Aggregate

Stream Aggregate 연산자는 하나 이상의 열로 행을 그룹화한 후 행 그룹에 대한 요약 값을
         계산합니다.
         이 연산자에 의한 출력은 다음 연산자에 의해 사용되거나, 사용자에게 반환되거나 
         
할 수 있습니다.
         Stream Aggregate 연산자를 사용하려면 입력이 그룹 내의 열을 기준으로 정렬되어야 하기 
         때문에, 데이터가 정렬되지 않은 경우, 이 연산자에 앞서 Sort연산자를 실행합니다.
         -SSMS그래픽 실행 계획 에서는 적절하게 정렬된 스트림 에서, 행 그룹에 대한 
          요약값을 계산합니다 라고 설명 하고 있습니다.
         -저의 실행계획의 경우, Full-text Union 한 데이터를 
          중복 제거하고, Join 하기 위해 Distinct 하는 과정에서 발생 한 것 같습니다.    
              Stream Aggregate.1

16. Table Spool

Table Spool 연산자는 입력을 검색 한 후 
         
tempdb 에 존재하는 '쿼리 사용 기간 중에만 존재하는 임시 테이블' 저장합니다.

===================================================

처음에 말씀 드린 것 처럼...
혹시 틀린것이 있거나, 제가 잘못 해석한것이 있다면, 댓글로 남겨주시면, 시정하고, 수정내역 남기도록 하겠습니다 ^^.

이 글을 읽어주신 모든분께.. 감사드립니다 ^^~!