如果直接内联SQL,在SQL Server 2008中使用内联表值函数时是否存在固有成本?我们的应用程序非常大量地使用内联表值函数来重用常见查询,但是最近我们发现如果我们不使用它们,查询运行得更快。SQL Server中的内联表值函数的成本
考虑一下:
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秒。
我在这种情况下使用表值函数的开销有点困惑。我原本没想到。在我们的应用程序中,我们有很多表值函数,所以我想知道是否有我在这里失踪的东西。
gbn,感谢您的链接。我必须深入研究它。 看来UDF的执行计划比内联版本要复杂得多,尽管我并不清楚为什么会出现这种情况。它确实显示我如何传递参数改变了行为。 SELECT TOP 10金额FROM dbo.fn_InnerQuery(dbo.Date(2008,7,24))ORDER BY金额 在15秒内运行。 选择TOP 10 Amount FROM dbo.fn_InnerQuery('7/24/2008')ORDER BY Amount runs in less than 1. – Linus 2009-08-19 17:11:38
使用'7/24/2008'然后dbo.Date会发生什么(2008, 7,24)内联? – gbn 2009-08-19 17:17:12