Testando o desempenho das funções escalares e com valor de tabela no servidor sql

OK, então eu li vários artigos que sugerem funções de valor de tabela e a aplicação cruzada oferece melhor desempenho do que um udf escalar. Eu queria escrever minha função dos dois modos e testar para ver qual é a melhor - mas não consigo descobrir o que devo usar / procurar para entender qual é a melhor opção.

Estou usando o SQL Server 2005. Tentei executar o plano de execução estimado, o plano de execução real e a consulta de análise no orientador de otimização do mecanismo de banco de dados e não sei o que ele está tentando me dizer.

Usando showplan_all on / off, parece que a função baseada em tabela usará mais CPU 1.157e-06 vs 8.3e-05, mas a função de tabela tem um custo total da subárvore de 0.000830157 vs 0.01983356.

O custo da consulta da função com valor de tabela também parece ter um custo mais alto que o escalar. Mesmo que eu pensasse que era a melhor opção.

Então, embora eu queira provar qual é o melhor desempenho - não sei o que procurar nessas ferramentas - para que todas as sugestões sejam apreciadas!

Eu preciso obter um valor de ano acadêmico (com base em um intervalo de datas definido no banco de dados) com base em uma data do calendário para que o conteúdo da função fique abaixo - então é apenas se eu vou escalar ou baseado em tabela. Este ano se alimenta de outras consultas.

CREATE FUNCTION fn_AcademicYear
(
    -- Add the parameters for the function here
    @StartDate DateTime
)
RETURNS 
@AcademicYear TABLE 
(
    AcademicYear int
)
AS
BEGIN

DECLARE @YearOffset int, @AcademicStartDate DateTime 

    -- Lookup Academic Year Starting Date
    SELECT @AcademicStartDate = CONVERT(DateTime,[Value])
    FROM dbo.SystemSetting
    WHERE [Key] = 'AcademicYear.StartDate'

    SET @YearOffset = DATEPART(YYYY,@StartDate) - DATEPART(YYYY,@AcademicStartDate);
    -- try setting academic looking start date to year of the date passed in
    SET @AcademicStartDate = DATEADD(YYYY, @YearOffset, @AcademicStartDate);

    IF @StartDate < @AcademicStartDate
    BEGIN
        SET @AcademicStartDate = DATEADD(YYYY, @YearOffset-1, @AcademicStartDate);
    END

      INSERT @AcademicYear
      SELECT YEAR(@AcademicStartDate)

    RETURN 

Obrigado!!

questionAnswers(1)

yourAnswerToTheQuestion