Пейджинг таблиц SQL ПРОИЗВОДИТЕЛЬНОСТЬ ... является ли EF4 + Linq SKIP + TAKE равным по производительности, чем использование параметров TSQL для запроса "подкачки" в таблице SQL? - PullRequest
9 голосов
/ 18 марта 2011

Если я хочу получить записи от 20 до 39 или от 40 до 59 из таблицы MSSQL.

Поскольку я использую MVC и EF4, производительность одинакова, если я просто делаю запрос Linq и процедуру Skip () и Take () для запроса подкачки ... или лучше сделать это насамой хранимой процедуры GetList ()?

1 Ответ

14 голосов
/ 18 марта 2011

Если вы выполните этот запрос linq:

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

Он выдаст этот 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

Это не так хорошо, как пользовательский SQL, который вы написали бы в своей хранимой процедуре, нов смысле производительности это то же самое.Разбивка на страницы производится в базе данных.

...