SQL表分页性能...... EF4 + Linq SKIP + TAKE的性能是否与使用TSQL参数在SQL表上请求"分页"相同?

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是在数据库上完成的.