2012-04-14 18 views
15

हाय मैं जब प्रोफाइल यह निम्नलिखित T-SQLLINQ का चयन पहले

SELECT TOP (1) [t0].[sysid], [t0].[name], [t0].[att_size], [t0].[cid], [t0].[flags], [t0].[contents] 
FROM [lntmuser].[attach] AS [t0] 

तरह से मैं इसे देख उत्पन्न LINQ कोड

var fp = lnq.attaches.First(a => a.sysid == sysid).name; 

के इस बिट है, यह एक चयन की तरह लौटा रहा है *, जो क्वेरी को स्कैन करने के लिए क्वेरी का कारण बनता है बल्कि एक अनुक्रमणिका का उपयोग करता है। प्रदर्शन के लिए बुरा है।

कैसे मैं सिर्फ नाम स्तंभ का चयन कर सकता है, जैसे: के रूप में वांछित

SELECT TOP (1) [t0].[name] 
FROM [lntmuser].[attach] AS [t0] 
WHERE [t0].[sysid] = @p0 

उत्तर

25

परियोजना के लिए टूटी चश्मा समाधान प्रोफाइल: अग्रिम में

SELECT TOP (1)[t0].[name] FROM [lntmuser].[attach] AS [t0] 

धन्यवाद


संपादित करें First() का उपयोग करने से पहले संपत्ति : - (अपने प्रारंभिक क्वेरी में लैम्ब्डा आप First() के लिए पारित किया) है कि आपके Where खंड जिम्मेदार है के लिए

var fp = lnq.attaches.Where(a => a.sysid == sysid) 
        .Select(a => a.name) 
        .First(); 

यह एक सूचकांक का उपयोग बदल नहीं है, हालांकि। दोनों प्रश्न name कॉलम पर एक इंडेक्स से लाभान्वित होते हैं, दूसरा एक तेज़ है क्योंकि केवल एक कॉलम मान को भौतिककृत किया जाना चाहिए।

+1

यह देखने के लिए उत्सुक होगा कि यह कोड प्रोफाइलर में कैसा दिखता है। – dtown123

+0

@ dtown123 हाँ, मैंने पहली चीज जो मैंने किया था, मैंने जवाब में कोड जोड़ा। –

+0

@ ब्रोकनग्लस जैसे ही यह आपकी मदद के लिए आपको धन्यवाद देता है –

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