在SQL Server 2008中,使用内联表值函数是否会带来与直接内联SQL不同的成本?我们的应用程序非常频繁地使用内联表值函数来重用常见查询,但最近发现,如果不使用它们,查询运行速度更快。
考虑以下情况:
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秒。
在这种情况下,使用表值函数的开销让我有些困惑。我没有预料到这一点。我们的应用程序中有很多表值函数,所以我想知道是否有什么我漏掉了。