【发布时间】:2009-08-19 16:42:57
【问题描述】:
如果直接内联 SQL,则在 SQL Server 2008 中使用内联表值函数是否存在固有成本?我们的应用程序大量使用内联表值函数来重用常见查询,但最近,我们发现如果不使用它们,查询运行得更快。
考虑一下:
CREATE FUNCTION dbo.fn_InnerQuery (@asOfDate DATETIME)
RETURNS TABLE
AS
RETURN
(
SELECT ... -- common, complicated query here
)
现在,当我这样做时:
SELECT TOP 10 Amount FROM dbo.fn_InnerQuery(dbo.Date(2009,1,1)) ORDER BY Amount DESC
查询会在大约 15 秒后返回结果。
但是,当我这样做时:
SELECT TOP 10 Amount FROM
(
SELECT ... -- inline the common, complicated query here
) inline
ORDER BY Amount DESC
查询在不到 1 秒内返回。
在这种情况下,我对使用表值函数的开销感到有些困惑。我没想到的是。我们的应用程序中有大量表值函数,所以我想知道这里是否缺少一些东西。
【问题讨论】:
标签: sql-server sql-server-2008