Функции в SQL Server 2008 - PullRequest
       12

Функции в SQL Server 2008

0 голосов
/ 13 октября 2009

Кеширует ли сервер sql план выполнения функций?

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Да, см. Ссылку Rexem на Tibor и ответ Эндрю.

Однако ... простая функция табличных значений в любом случае не раскрывается / не раскрывается во внешнем запросе. Понравился вид. И мой ответ (со ссылками) здесь

То есть этот тип:

CREATE FUNC dbo.Foo ()
RETURNS TABLE
AS
RETURN (SELECT ...)
GO
2 голосов
/ 13 октября 2009

Согласно DMV, да, http://msdn.microsoft.com/en-us/library/ms189747.aspx, но для подтверждения мне нужно будет выполнить тест.

Идентификатор объекта в выходных данных - это «идентификатор объекта (например, хранимой процедуры или пользовательской функции) для этого плана запроса».

Протестировал и да, похоже, они получают отдельную запись кэша плана.

Тестовый скрипт:

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>)

Первым adhoc в моем тесте был фактический запрос, 2-ым ad-hoc был запрос с запросом кеша плана. Таким образом, он определенно получил отдельную запись под другим типом процедуры, к которой отправляется запрос adhoc. Дескриптор плана также отличался, и при извлечении с использованием дескриптора плана он возвращает идентификатор объекта в исходную функцию, в то время как запрос adhoc не предоставляет идентификатор объекта.

...