मैं अपने 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
वहाँ पहले एक तेजी लाने के लिए एक तरह से या किसी अन्य तरीके से यह करने के लिए है?
क्या आप प्रत्येक के लिए जेनरेट किए गए प्रश्न दिखा सकते हैं? साथ ही, आप 'संदर्भ' से सीधे पूछताछ क्यों नहीं कर रहे हैं? 'AsQueryable()' का उपयोग क्यों करें? –
'ASQueryable()' दोनों मामलों में अनावश्यक है – haim770
@ haim770 रिडंडेंट, हाँ, लेकिन समस्याग्रस्त या हानिकारक नहीं है। – Servy