任何人都可以幫助我理解以下查詢的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