任何人都可以帮助我理解以下查询的SQL Server执行计划吗?SQL Server标量函数与子查询执行计划分析
我预计子查询版本(查询2)执行得更快,因为它是基于集合的。这似乎捉迷藏独立的查询时是这样 - 轻微 - 但是执行计划显示查询费用为15%对85%:缺少什么我在这里
//-- Query 1 (15%) - Scalar Function
SELECT
gi.GalleryImageId,
gi.FbUserId,
dbo.GetGalleryImageVotesByGalleryImageId(gi.GalleryImageId) AS Votes
FROM
GalleryImage gi
//-- Query 2 (85%) - Subquery
SELECT
gi.GalleryImageId,
gi.FbUserId,
(SELECT COUNT(*) FROM GalleryImageVote WHERE GalleryImageId = gi.GalleryImageId)
FROM
GalleryImage gi
;执行计划是否会跳过该函数的成本?此外,有关上述任一方面是否可以更好地使用CTE或OVER/PARTITION查询的建议?
预先感谢您!
你有没有他们在同一个查询编辑器窗口?因为查询分析器会比较它们并为每个窗口(15%/ 85%)分配一个相对值。 – JNK 2011-01-20 17:48:49
是的,这就是%值来自于的地方:) – Robarondaz 2011-01-21 09:23:42
查询执行时间并不总是等于成本。 SQL Server似乎对CPU和RAM的使用比硬盘读取更重要。 – jahu 2015-08-19 11:33:21