SQL Server는 함수의 실행 계획을 캐시합니까?SQL Server 2008의 함수
0
A
답변
2
dmv 예에 따르면, http://msdn.microsoft.com/en-us/library/ms189747.aspx하지만 확인하려면 테스트를 실행해야합니다.
출력의 개체 ID는 "이 쿼리 계획에 대한 개체 ID (예 : 저장 프로 시저 또는 사용자 정의 함수)입니다".
테스트 해본 결과 별도의 계획 캐시 항목이있는 것처럼 보입니다.
테스트 스크립트 :
create function foo (@a int)
returns int
as
begin
return @a
end
생성 기능의 가장 기본적인.
-- clear out the plan cache
dbcc freeproccache
dbcc dropcleanbuffers
go
-- use the function
select dbo.foo(5)
go
-- inspect the plan cache
select * from sys.dm_exec_cached_plans
go
은 계획 캐시는 4 개 항목 OBJTYPE로 표시 한 = PROC 함수 플랜 캐시는, 핸들을 움켜 열어 균열 갖는다.
select * from sys.dm_exec_query_plan(<insertplanhandlehere>)
내 테스트의 첫 번째 애드혹은 2 애드혹가 계획 캐시를 요청하는 쿼리이었다, 실제 쿼리이었다. 그래서 그것은 분명히 발행되는 adhoc 질의와 다른 proc 유형 하에서 별도의 엔트리를 받았다. 플랜 핸들은 또한 다르며 플랜 핸들을 사용하여 추출 할 때 원래의 함수에 오브젝트 ID를 제공하는 반면, 임시 쿼리는 오브젝트 ID를 제공하지 않습니다.
2
예, rexem의 Tibor 링크 및 Andrew의 답변을 참조하십시오.
그러나 ... 간단한 테이블 값 함수는 외부 쿼리로 중첩/확장되지 않습니다. 보기처럼. 이다 And my answer (with links) here
이 유형 :
CREATE FUNC dbo.Foo()
RETURNS TABLE
AS
RETURN (SELECT ...)
GO
를 참조하십시오 http://sqlblog.com/blogs/tibor_karaszi/archive/2007/06/14/are-execution-plans-for-functions- cached.aspx –