10

निम्न क्वेरी में से कौन सा बेहतर है ... यह सिर्फ एक उदाहरण है, कई स्थितियों में, जहां मैं उपयोगकर्ता नाम UserID के बजाय प्रदर्शित करना चाहते हैं देखते हैंभीतरी अदिश समारोह बनाम में शामिल होने

Select EmailDate, B.EmployeeName as [UserName], EmailSubject 
    from Trn_Misc_Email as A 
     inner join 
     Mst_Users as B on A.CreatedUserID = B.EmployeeLoginName 

या

Select EmailDate, GetUserName(CreatedUserID) as [UserName], EmailSubject 
    from Trn_Misc_Email 

अगर वहाँ पहले का प्रयोग करने में कोई प्रदर्शन लाभ है, मैं दूसरे का उपयोग कर पसंद करेंगे ... मैं उपयोगकर्ता तालिका में 2000 के आसपास रिकॉर्ड और ईमेल तालिका में 100k रिकॉर्ड ... होने की जाएगी

धन्यवाद

+0

क्या आपने इसे अपने लिए आजमाया है? –

उत्तर

11

एक अच्छा सवाल और महान दृश्य का एक शुद्ध एसक्यूएल बिंदु पहले बेहतर है से आदि

, एसक्यूएल प्रदर्शन के बारे में सोच किया जाना है। पहले बयान में यह एक बैच कमांड में शामिल होने के साथ सबकुछ करने में सक्षम है। दूसरे में, trn_misc_email में प्रत्येक पंक्ति के लिए इसे उपयोगकर्ता नाम प्राप्त करने के लिए एक अलग बैच चयन चलाने के लिए है। इससे अब प्रदर्शन प्रदर्शन समस्या हो सकती है, या भविष्य में

यह भी प्रोजेक्ट पर आने वाले किसी और के लिए पढ़ने के लिए उत्सुक है क्योंकि वे देख सकते हैं कि क्या हो रहा है। यदि आपके पास दूसरा स्थान था, तो आपको यह पता लगाने के लिए कि क्या कर रहा है, आपको फ़ंक्शन में देखना होगा (मुझे लगता है कि यह वही है)।

तो वास्तव में पहले कारणों का उपयोग करने के दो कारण हैं।

3

इनलाइन एसक्यूएल JOIN आमतौर पर better than the scalar UDF हो जाएगा के रूप में यह बेहतर अनुकूलित किया जा सकता है।

परीक्षण करते समय हालांकि दोनों संस्करणों की लागत देखने के लिए SQL प्रोफाइलर का उपयोग करना सुनिश्चित करें। SET STATISTICS IO ON अपने आंकड़ों में स्केलर यूडीएफ के लिए लागत की रिपोर्ट नहीं करता है जो स्केलर यूडीएफ संस्करण वास्तव में उससे बेहतर दिखाई देगा।

+0

क्या आपके पास कोई संदर्भ है जो निष्पादन योजना और सांख्यिकी सूचनाओं को समझने में मेरी सहायता करता है –

+3

@ द किंग - यह मुफ्त ईबुक देखें ["अनुदान SQL सर्वर निष्पादन योजनाएं" अनुदान Fritchey द्वारा] (http: //downloads.red-gate। com/ebooks/HighPerformanceSQL_ebook.zip) –

1

मैनेजमेंट स्टूडियो का उपयोग करके SQL सर्वर में बस एक टिप, आपकी सहायता करने के लिए आप Display Estimated execution plan द्वारा प्रदर्शन का मूल्यांकन कर सकते हैं। यह दिखाता है कि इंडेक्स और जॉइन कैसे काम करते हैं और आप इसका उपयोग करने का सबसे अच्छा तरीका चुन सकते हैं।

इसके अलावा आप अधिक जानकारी और अनुकूलन के लिए डीटीए (डाटाबेस इंजन ट्यूनिंग सलाहकार) का उपयोग कर सकते हैं।

+1

स्केलर यूडीएफ को मुझे लगता है कि इस पर काले बॉक्स के रूप में माना जाता है। –

+1

क्या आपके पास कोई संदर्भ है जो निष्पादन योजना और सांख्यिकी सूचनाओं को समझने में मेरी सहायता करता है। –

+0

@ मार्टिन स्मिथ, नहीं, निष्पादन योजना स्पष्ट रूप से सभी चरणों के साथ दिखायी गई है और लागत के रूप में क्या होता है .... आप स्वयं से कोशिश कर सकते हैं। इसके अलावा एक स्केलर यूडीएफ अगले चलते –

2

अदिश UDFs बहुत धीमी गति से but the inline ones are much faster, typically as fast as joins and subqueries

BTW कर रहे हैं, आप फ़ंक्शन को कॉल करने के साथ बराबर है एक बाहरी में शामिल होने, नहीं एक आंतरिक एक करने के लिए करने के लिए क्वेरी।

संबंधित मुद्दे