सबसे पहले, यह ((J.Id = @Jobid and @Jobid>0) or @Jobid=0)
इस (@Jobid = 0 or J.Id = @Jobid)
से बदला जा सकता है ध्यान दें कि 0
. के बाद से स्पष्ट रूप से जॉब आईडी (या कर्मचारी, या लीड), and
. के लिए मान्य मान नहीं है भाग अप्रासंगिक है क्योंकि किसी भी रिकॉर्ड में कभी भी 0 की आईडी नहीं होगी।
दूसरा, 0
का प्रयोग न करें अमान्य मान के रूप में, null
का उपयोग करें बजाय। यह प्रदर्शन को प्रभावित नहीं करेगा, लेकिन यह एक बेहतर प्रोग्रामिंग आदत है, क्योंकि 0
अन्य स्थितियों में बहुत अच्छी तरह से मान्य मान हो सकता है।
तीसरा, कैच-ऑल क्वेश्चन को प्रदर्शन प्रभावित होने के लिए जाना जाता है, विशेष रूप से संग्रहीत प्रक्रियाओं में, क्योंकि कैश्ड निष्पादन योजना वर्तमान निष्पादन के लिए सर्वोत्तम नहीं हो सकती है। मेरे सर्वोत्तम ज्ञान के लिए, इसे संभालने का सबसे अच्छा तरीका क्वेरी में एक पुन:संकलित संकेत जोड़ना है, जैसा कि यह लेख और उस लेख में ।
इसलिए, मैं आपकी क्वेरी को इस तरह दिखने का सुझाव देता हूं:
CREATE PROCEDURE <procedure name>
(
@Jobid INT=NULL,
@leadid INT=NULL,
@employeeid INT=NULL
)
AS
SELECT e.id,
l.id,
j.id,
e.NAME,
l.NAME,
j.NAME
FROM employee e
INNER JOIN leads l
ON e.leadid = l.id
INNER JOIN Jobs j
ON j.id = e.Jobid
WHERE (@Jobid IS NULL OR J.Id = @Jobid)
AND (@leadid IS NULL OR l.Id = @leadid)
AND (@employeeid IS NULL OR e.Id = @employeeid)
OPTION(RECOMPILE)
GO
तालिकाओं के सही अनुक्रमण के साथ चयन प्रदर्शन में आमतौर पर सुधार होता है। हालाँकि, अनुक्रमण को सही ढंग से ज्ञान की आवश्यकता है जो सभी डेवलपर्स के पास नहीं है। यह अच्छी तरह से पढ़ने लायक विषय है। मैं यहां से शुरू करूंगा ।