2015-05-18 14 views
5

मैं अपने mssql डेटाबेस से डेटा का चयन करने के लिए EntityFramework का उपयोग कर रहा हूं। मेरी क्वेरी कुछ इस तरह दिखती है:लिंक प्रदर्शन प्रदर्शन के साथ EntityFramework 6.1.1

int param = 123456; 
using (var context = new DatabaseContext()) 
{ 
    var query = context.Table.AsQueryable(); 
    var result = query.Where(o => o.Id == param).ToList(); 
} 

इस क्वेरी में लगभग 10 सेकंड लगते हैं।

using (var context = new DatabaseContext()) 
{ 
    var query = context.Table.AsQueryable(); 
    var result = query.Where(o => o.Id == 123456).ToList(); 
} 

यह क्वेरी 1 सेकंड से कम लेती है।

मुझे पता चला कि EntityFramework दो अलग-अलग प्रश्न उत्पन्न करता है।

क्वेरी 1:

SELECT TOP (20) 
[Project1].[Id] AS [Id], 
[Project1].[Name] AS [Name], 
FROM (SELECT [Project1].[Id] AS [Id], [Project1].[Name] AS [Name], row_number() OVER (ORDER BY [Project1].[Id] DESC) AS [row_number] 
    FROM (SELECT 
     [Extent1].[Id] AS [Id], 
     [Extent1].[Name] AS [Name] 
     FROM [dbo].[Table] AS [Extent1] 
     WHERE [Extent1].[Id] = @p__linq__0 
    ) AS [Project1] 
) AS [Project1] 
WHERE [Project1].[row_number] > 0 
ORDER BY [Project1].[Id] DESC 
-- p__linq__0: '2932323' (Type = Int32, IsNullable = false) 

क्वेरी 2:

SELECT TOP (20) 
[Filter1].[Id] AS [Id], 
[Filter1].[Name] AS [Name] 
FROM (SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], row_number() OVER (ORDER BY [Extent1].[Id] DESC) AS [row_number] 
    FROM [dbo].[Table] AS [Extent1] 
    WHERE 2932323 = [Extent1].[Id] 
) AS [Filter1] 
WHERE [Filter1].[row_number] > 0 
ORDER BY [Filter1].[Id] DESC 

वहाँ पहले एक तेजी लाने के लिए एक तरह से या किसी अन्य तरीके से यह करने के लिए है?

+0

क्या आप प्रत्येक के लिए जेनरेट किए गए प्रश्न दिखा सकते हैं? साथ ही, आप 'संदर्भ' से सीधे पूछताछ क्यों नहीं कर रहे हैं? 'AsQueryable()' का उपयोग क्यों करें? –

+5

'ASQueryable()' दोनों मामलों में अनावश्यक है – haim770

+0

@ haim770 रिडंडेंट, हाँ, लेकिन समस्याग्रस्त या हानिकारक नहीं है। – Servy

उत्तर

2

imho, एसक्यूएल प्रश्नों को देखा, यह (केवल) एक ईएफ संबंधित प्रदर्शन समस्या नहीं है, लेकिन एक SQL सर्वर प्रदर्शन समस्या है।

    आईडी के रूप में
  • एक पी नहीं है::

    आप चाहिए निम्नलिखित पर विचार करता है उस पर एक सूचकांक बनाएँ;

  • आंकड़ों को अद्यतन करने के लिए EXEC sp_updatestats का उपयोग करें और डीबी सर्वर को बेहतर निष्पादन योजनाओं का उत्पादन करने में सहायता करें।

बीटीडब्ल्यू: एसएसएमएस में क्वेरी 1 कितनी देर लेता है?

2

मुझे समाधान मिला।

मैंने sp_recompile का उपयोग करके सभी निष्पादन योजनाओं को छोड़ दिया और अब सब ठीक काम कर रहे हैं।

आपकी सहायता के लिए Thx।

पी

+0

और क्वेरी अभी भी भिन्न है? पैरामीटर वाला एक अभी भी धीमा है क्योंकि ईएफ अजीब एसक्यूएल – Thorarins

+0

उत्पन्न करता है, प्रश्न अभी भी वही हैं। लेकिन दोनों एक ही समय लेते हैं –

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