Почему вставка в таблицы #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
Почему вставка в таблицы #temp и присоединение к ним происходит быстрее?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.