SQL Table Paging PERFORMANCE …is EF4 + Linq SKIP +

2019-01-25 10:30发布

问题:

If I want to retrieve records from 20 to 39, or from 40 to 59 from an MSSQL Table.

Since I'm using MVC and EF4, is performance the same if I just do a Linq query and Skip() and Take() procedure to request paging ....or is it better to do it on a GetList() Stored Procedure itself?

回答1:

If you execute this linq query:

var data = context.Posts.OrderBy(p => p.Id).Skip(20).Take(20).ToList();

It will produce this 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

It is not such nice like custom SQL you would write in your stored procedure but in the meaning of performance it is the same. Pagining is done on database.