LINQ skip & take имеет приличную производительность? - PullRequest
3 голосов
/ 08 сентября 2010

У нас есть запрос около 40 полей данных, связанных с клиентами.Запрос часто возвращает большое количество записей, скажем, до 20 000.Мы хотим использовать только около 500 первых результатов.Тогда мы просто хотим иметь возможность просматривать их по 10 за раз.

Пропускает ли LINQ и подходит ли для этого разумный подход?Существуют ли какие-либо проблемы с производительностью при использовании этого подхода по сравнению с выполнением его вручную каким-либо другим способом?

Ответы [ 2 ]

6 голосов
/ 08 сентября 2010

Take() без Skip() генерирует SQL с использованием предложения TOP.

Take() с Skip генерирует SQL с использованием ROW_NUMBER(), как показано здесь .

Кроме того, я бы рекомендовал использовать превосходный инструмент LINQPad или протоколирование LINQ to SQL для проверки сгенерированных запросов.

2 голосов
/ 08 сентября 2010

Да, если вы используете SQL Server 2005+, он сгенерирует SQL, который использует функцию ROW_NUMBER() для повышения эффективности подкачки (в отличие от SQL, который Скотт использует в этом сообщении ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...