저장 프로시저에서의 실행 계획
저장 프로시저에서의 실행 계획은 지금까지 살펴본 예문에서의 실행 계획과 별반 다를 바 없다.
이해를 돕기 위해 AdventureWorks 데이터베이스에 아래와 같이 저장 프로시저를 작성해 보자.
CREATE PROCEDURE [Sales].[spTaxRateByState]@CountryRegionCode NVARCHAR(3)
AS
SET NOCOUNT ON ;
SELECT [st].[SalesTaxRateID],[st].[Name],
[st].[TaxRate],
[st].[TaxType],
[sp].[Name] AS StateNameFROM [Sales].[SalesTaxRate] stJOIN [Person].[StateProvince] spON [st].[StateProvinceID] = [sp].[StateProvinceID]WHERE [sp].[CountryRegionCode] = @CountryRegionCodeORDER BY [StateName]GO
그리고 아래와 같이 저장 프로시저를 실행 해보자.
EXEC [Sales].[spTaxRateByState] @CountryRegionCode = 'US'
실질 실행 계획의 결과는 아마 다음과 같이 보여질 것이다.
[그림 1] 저장 프로시저 [Sales].[spTaxRateByState] 를 실행하였을 때의 실질 실행 계획
먼저, @CountryRegionCode 파라미터에 바인드된 값(‘US’)을 토대로 Person.StateProvince 테이블을 Clustered Index Scan 연산을 한다. 그리고 이 연산을 통해 얻어진 결과는 Sort 연산자에 의해 정렬된다. 정렬된 데이터는 Sales.SalesTaxRate 테이블에서 Index Seek 연산을 통해 얻어진 결과와 Nested Loop Join을 한다.
다음으로 Key Lookup 연산을 수행한다. 이 연산자는 Sales.SalesTaxRate 테이블에 대해 AK_CountryRegion_Name 인덱스를 Index Seek 연산한 결과인 키 리스트를 공급 받아, 공급 받은 키 값을 토대로 Clustered Index 상에 데이터를 검색한다.
마지막으로 앞에서 Nested Loop 연산을 한 결과와 다시 Nested Loop 연산을 수행한다.
선두에서 이미 언급하였다시피 저장 프로시저라고 해서 실행 계획이 특별한 것은 아니다. 우리가 관심을 가져야 할 부분은 실행 계획 자체가 아니라, 저장 프로시저 안의 T-SQL구문 역시 일반 T-SQL문과 똑같이 실행 계획이 풀린다는 점이다.
'연구개발 > 실행계획' 카테고리의 다른 글
[MS SQL Server]Assert 실행계획 연산자(Assert Showplan Operator) (0) | 2011.07.18 |
---|---|
[MS SQL Server]실행 계획 연산자 리스트 (0) | 2011.07.18 |
15. 텍스트 및 XML 실행 계획의 기초 - XML 실행 계획 (0) | 2011.07.18 |
14. 텍스트 및 XML 실행 계획의 기초 - 텍스트 실행 계획 (0) | 2011.07.18 |
13. 그래픽 실행 계획의 기초 - Insert, Update, Delete문의 실행 계획 (0) | 2011.07.17 |