SF *_*per 9 t-sql entity-framework-4 ef-code-first
如果我想从MSSQL表中检索20到39或40到59的记录.
由于我正在使用MVC和EF4,如果我只是执行Linq查询和Skip()以及Take()过程来请求分页,那么性能是否相同....或者在GetList()存储过程中执行它是否更好本身?
Lad*_*nka 14
如果执行此linq查询:
var data = context.Posts.OrderBy(p => p.Id).Skip(20).Take(20).ToList();
Run Code Online (Sandbox Code Playgroud)
它会产生这个SQL:
SELECT TOP (20)
[Extent1].[Id] AS [Id],
[Extent1].[Text] AS [Text]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Text] AS [Text],
row_number() OVER (ORDER BY [Extent1].[Id] ASC) AS [row_number]
FROM [dbo].[Posts] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Id] ASC
Run Code Online (Sandbox Code Playgroud)
它不像你在存储过程中编写的自定义SQL那么好,但在性能的意义上它是相同的.Pagining是在数据库上完成的.