논리 및 물리 연산자 참조
연산자는 SQL Server에서 쿼리 또는 DML(데이터 조작 언어) 문이 실행되는 방식을 설명합니다. 쿼리 최적화 프로그램은 연산자를 사용하여 쿼리 계획을 작성함으로써 쿼리에 지정된 결과를 만들거나 DML 문에 지정된 작업을 수행합니다. 쿼리 계획은 물리 연산자로 구성된 트리입니다.
연산자는 논리 연산자와 물리 연산자로 분류됩니다. 논리 연산자는 개념 수준에서의 관계형 쿼리 처리 작업을 설명합니다. 물리 연산자는 구체적인 메서드 또는 알고리즘을 사용하여 논리 연산자가 정의한 작업을 실제로 구현합니다. 예를 들어 "join"은 논리 연산자이며 "nested loops joins"는 물리 연산자입니다.
논리 연산자
논리 연산자는 문을 처리할 때 사용되는 관계형 대수 연산을 설명합니다. 즉, 논리 연산자는 어떤 작업을 수행해야 하는지 개념적으로 설명합니다.물리 연산자
물리 연산자는 논리 연산자가 설명한 작업을 구현합니다. 각 물리 연산자는 연산을 수행하는 개체 또는 루틴입니다. 예를 들어 일부 물리 연산자는 테이블, 인덱스 또는 뷰에서 열이나 행에 액세스합니다. 다른 물리 연산자는 다른 유형의 연산을 수행합니다. Aggregate 연산자는 MIN, MAX, SUM, COUNT 또는 AVG를 포함하는 식을 계산하고 Merge Join 연산자는 다른 유형의 논리 조인 연산을 수행합니다.물리 연산자는 초기화하고 데이터를 수집하며 종료합니다. 특히 물리 연산자는 다음 3개의 메서드 호출에 응답할 수 있습니다.
Init(): Init() 메서드는 물리 연산자가 초기화하고 필요한 데이터 구조를 설정하도록 합니다. 일반적으로 물리 연산자는 하나의 Init() 호출을 받지만 여러 개의 호출을 받을 수도 있습니다.
GetNext(): GetNext() 메서드는 물리 연산자가 처음 또는 다음 데이터 행을 가져오도록 합니다. 물리 연산자는 GetNext() 호출을 받지 않을 수도 있고 여러 개의 호출을 받을 수도 있습니다.
Close(): Close() 메서드는 물리 연산자가 정리 작업을 수행하고 종료하도록 합니다. 물리 연산자는 하나의 Close() 호출만 받습니다.
GetNext() 메서드는 하나의 데이터 행을 반환하며 호출 횟수는 SET STATISTICS PROFILE ON 또는 SET STATISTICS XML ON을 사용하여 생성된 실행 계획 출력에 ActualRows로 나타납니다. 이러한 SET 옵션에 대한 자세한 내용은 SET STATISTICS PROFILE(Transact-SQL) 및 SET STATISTICS XML(Transact-SQL)을 참조하십시오.
실행 계획 출력에 나타나는 ActualRebinds 및 ActualRewinds 개수는 Init() 메서드가 호출된 횟수를 나타냅니다. 연산자가 루프 조인의 내부 측면에 있지 않으면 ActualRebinds는 1이고 ActualRewinds는 0입니다. 연산자가 루프 조인의 내부 측면에 있으면 다시 바인딩 횟수와 되감기 횟수의 합계가 조인 외부 측면에서 처리된 행 수와 같아야 합니다. 다시 바인딩은 조인의 상호 관련된 매개 변수가 하나 이상 변경되었으며 내부 측면을 다시 평가해야 함을 의미합니다. 되감기는 상호 관련된 매개 변수가 변경되지 않았으며 이전 내부 결과 집합을 다시 사용할 수 있음을 의미합니다.
ActualRebinds 및 ActualRewinds는 SET STATISTICS XML ON을 사용하여 생성된 XML 실행 계획 출력에 표시되며 Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool 및 Table-valued Function 연산자에 대해서만 채워집니다. ActualRebinds 및 ActualRewinds는 StartupExpression 특성이 TRUE로 설정되어 있을 때 Assert 및 Filter 연산자에 대해서도 채워질 수 있습니다.
ActualRebinds와 ActualRewinds가 XML 실행 계획에 있을 경우 EstimateRebinds 및 EstimateRewinds와 같습니다. 두 값이 없으면 예상 행 수(EstimateRows)가 실제 행 수(ActualRows)와 같으며 실제 그래픽 실행 계획 출력에 실제 다시 바인딩 횟수와 실제 되감기 횟수가 모두 0으로 표시됩니다. 그래픽 실행 계획에 대한 자세한 내용은 그래픽 실행 계획 표시(SQL Server Management Studio)를 참조하십시오.
관련 카운터인 ActualEndOfScans는 SET STATISTICS XML ON을 사용하여 실행 계획 출력이 생성된 경우에만 사용할 수 있습니다. 이 카운터는 물리 연산자가 데이터 스트림의 끝에 도달할 때마다 1씩 증가합니다. 물리 연산자는 데이터 스트림의 끝에 도달하지 않거나 1회 이상 여러 번 도달할 수 있습니다. 다시 바인딩 및 되감기와 마찬가지로 검색 끝 수도 연산자가 루프 조인의 내부 측면에 있는 경우에만 둘 이상이 될 수 있습니다. 검색 끝 수는 다시 바인딩 횟수와 되감기 횟수의 합계보다 작거나 같아야 합니다.
물리 연산자는 실행 알고리즘에 해당합니다. 물리 연산자의 예로는 index scan/seek, nested loop join, merge join, hash join/aggregation, stream aggregation 등이 있습니다. 물리 연산자는 비용과 관련이 있습니다. 쿼리 또는 DML 문 실행의 각 단계마다 물리 연산자가 포함됩니다.
물리 및 논리 연산자 매핑
쿼리 최적화 프로그램은 쿼리 계획을 논리 연산자로 이루어진 트리로 만듭니다. 쿼리 최적화 프로그램은 쿼리 계획을 만든 다음 각 논리 연산자에 대해 가장 효율적인 물리 연산자를 선택합니다. 쿼리 최적화 프로그램은 비용에 기반을 둔 방법을 사용하여 논리 연산자를 구현할 물리 연산자를 결정합니다.
일반적으로 여러 물리 연산자가 하나의 논리 연산자를 구현할 수 있습니다. 그러나 간혹 하나의 물리 연산자가 여러 논리 연산자를 구현하는 경우도 있습니다.
섹션 내용
이 섹션에서는 다음 논리 및 물리 연산자에 대한 설명을 제공합니다.
|