Hem bir Tablo Değerli İşlevde hem de Saklanan Yordamda çalışan aynı kod biti (uzun bir SELECT deyimi) ve düz bir EXEC / SELECT ve her biri aynı şekilde gerçekleştirilen uzun süreli bir mantık biti ile bazı testler yaptım.
Kanımca, bir sonuç kümesini döndürmek için saklı yordam yerine her zaman Tablo Değerli İşlev kullanın, çünkü daha sonra bunlarla birleşen sorgularda mantığı çok daha kolay ve okunabilir hale getirir ve aynı mantığı yeniden kullanmanızı sağlar. Çok fazla performans vuruşunu önlemek için, işlevin sonuç kümesini daha hızlı döndürmesini sağlamak için genellikle "isteğe bağlı" parametreler (yani bunlara NULL geçirebilirsiniz) kullanırım, örneğin:
CREATE FUNCTION dbo.getSitePermissions(@RegionID int, @optPersonID int, optSiteID int)
AS
RETURN
SELECT DISTINCT SiteID, PersonID
FROM dbo.SiteViewPermissions
WHERE (@optPersonID IS NULL OR @optPersonID = PersonID)
AND (@optSiteID IS NULL OR @optSiteID = SiteID)
AND @RegionID = RegionID
Bu şekilde, bu işlevi birçok farklı durum için kullanabilirsiniz ve büyük bir performans darbesi almayın. Bunun daha sonra filtrelemekten daha verimli olduğuna inanıyorum:
SELECT * FROM dbo.getSitePermissions(@RegionID) WHERE SiteID = 1
Bu tekniği birkaç işlevde, bazen bu türden "isteğe bağlı" parametrelerin uzun bir listesiyle kullandım.