Tôi đang sử dụng EntityFramework để chọn dữ liệu từ cơ sở dữ liệu mssql của tôi. Truy vấn của tôi trông giống như sau:EntityFramework 6.1.1 với vấn đề hiệu suất LINQ
int param = 123456;
using (var context = new DatabaseContext())
{
var query = context.Table.AsQueryable();
var result = query.Where(o => o.Id == param).ToList();
}
Truy vấn này mất khoảng 10 giây.
using (var context = new DatabaseContext())
{
var query = context.Table.AsQueryable();
var result = query.Where(o => o.Id == 123456).ToList();
}
Truy vấn này mất chưa đến 1 giây.
Tôi vừa phát hiện ra rằng EntityFramework tạo hai truy vấn khác nhau.
Query 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)
Query 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
Có cách nào để tăng tốc độ đầu tiên hoặc một cách khác để làm điều đó?
Bạn có thể hiển thị các truy vấn được tạo cho mỗi người không? Ngoài ra, tại sao bạn không truy vấn trực tiếp 'context'? Tại sao sử dụng 'AsQueryable()'? –
'AsQueryable()' là dự phòng trong cả hai trường hợp – haim770
@ haim770 Dự phòng, có, nhưng không có vấn đề hoặc có hại. – Servy