Почему вставка в таблицы #temp и присоединение к ним происходит быстрее?

Этот ответ необходимо читать sql-server-2005 вместе со статьей Куассной sql-srever
http://explainextended.com/2009/05/28/generating-xml-in-subqueries/

При разумном применении sql-srever CROSS APPLY вы можете принудительно sql-server-2005 выполнить кэширование или sql-syntax ускоренную оценку встроенных tsql TVF. Этот запрос возвращается sql-srever мгновенно.

SELECT  *
FROM    (
        SELECT  (
                SELECT  f.num
                FOR XML PATH('fo'), ELEMENTS ABSENT
                ) AS x
        FROM    [20090528_tvf].t_integer i
        cross apply (
            select num
            from [20090528_tvf].fn_num(9990) f
            where f.num = i.num
            ) f
) q
--WHERE   x IS NOT NULL -- covered by using CROSS apply
FOR XML AUTO

Вы не предоставили ms-sql-server реальных структур, поэтому sql-select сложно построить что-то значимое, но mssql2005 этот метод тоже должен применяться.

Если sql-select вы измените TVF с несколькими ms-sql-server операторами в статье Квассной sql-statement на встроенную TVF, план станет sql-select еще быстрее (по крайней мере, на sql-server-2005 один порядок), и план волшебным sql-syntax образом сведется к чему-то, чего sql-server-2005 я не могу понять (это слишком mssql просто!).

CREATE FUNCTION [20090528_tvf].fn_num(@maxval INT)  
RETURNS TABLE
AS RETURN 
        SELECT  num + @maxval   num
        FROM    t_integer  

Статистика

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(10 row(s) affected)
Table 't_integer'. Scan count 2, logical reads 22, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 2 ms.

sql

sql-server

sql-server-2005

tsql

2022-06-22T22:04:24+00:00
Вопросы с похожей тематикой, как у вопроса:

Почему вставка в таблицы #temp и присоединение к ним происходит быстрее?