मैंने कुछ परीक्षणों को एक लंबे समय तक चलने वाले तर्क के साथ चलाया, जिसमें एक ही बिट कोड (एक लंबा चयन कथन) के साथ एक टेबल वैल्यूड फंक्शन और एक संग्रहीत प्रक्रिया, और एक सीधे EXEC / SELECT दोनों चल रहे थे, और प्रत्येक ने पहचान की।
मेरे विचार में, परिणाम सेट करने के लिए संग्रहीत प्रक्रिया के बजाय हमेशा टेबल वेल्यूएड फ़ंक्शन का उपयोग करें, क्योंकि यह लॉजिक को प्रश्नों में बहुत आसान और पठनीय बनाता है जो बाद में उनके साथ जुड़ जाता है, और आपको उसी तर्क का पुन: उपयोग करने में सक्षम बनाता है। प्रदर्शन के बहुत अधिक हिट से बचने के लिए, मैं अक्सर "वैकल्पिक" मापदंडों का उपयोग करता हूं (यानी आप उन्हें NULL पास कर सकते हैं) फ़ंक्शन को सक्षम करने के लिए परिणाम सेट करने के लिए जल्दी, जैसे:
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
इस तरह आप कई अलग-अलग स्थितियों के लिए इस फ़ंक्शन का उपयोग कर सकते हैं, और एक बड़ा प्रदर्शन हिट नहीं कर सकते। मेरा मानना है कि यह बाद में छानने की तुलना में अधिक कुशल है:
SELECT * FROM dbo.getSitePermissions(@RegionID) WHERE SiteID = 1
मैंने इस तकनीक का उपयोग कई कार्यों में किया है, कभी-कभी इस प्रकार के "वैकल्पिक" मापदंडों की लंबी सूची के साथ।