Ускорьте запрос linq без предложений where - PullRequest
1 голос
/ 14 октября 2011

Быстрый вопрос о производительности LINQ.

У меня есть база данных с большим количеством записей, и она используется для интернет-магазина.

Вся логика запросов и разбиение по страницам выполняются с помощью LINQ, и они работают довольно хорошо.Это связано с тем, что обычный поиск продуктов содержит одно или несколько предложений where, и это сокращает мой набор результатов до пары сотен результатов при макс.Но ... есть возможность перечислить все товары (если критерии поиска не указаны), и этот запрос медленный .. очень медленный.Хотя я просто запрашиваю одну страницу с .Skip (20) .Take (10), она все еще медленная, потому что общий результат составляет около 140000 продуктов.Есть ли способ ограничить этот (или весь) запрос, чтобы скорость всего оставалась в порядке?Я не хочу заставлять своих клиентов предоставлять один или несколько критериев ... но, с другой стороны, у меня нет проблем с тем, чтобы сказать им, что они никогда не смогут найти более 2000 продуктов.

Спасибо за помощь!Тыс

Ответы [ 4 ]

1 голос
/ 14 октября 2011

Почему бы вам не ограничить количество записей на стороне SQL, как описано в этом посте http://www.sqlservercurry.com/2009/06/skip-and-take-n-number-of-records-in.html

1 голос
/ 14 октября 2011

Следите за любыми "преждевременными" перечислениями, когда вы передаете запросы / результаты в своем коде!

Существует также несколько визуализаторов LINQ, которые могут помочь понять, на что на самом деле переводятся выражения LINQ. Или вы можете поиграть с выражениями в LINQPad, прежде чем интегрировать их в свой код ...

0 голосов
/ 14 октября 2011

Вы можете проверить, какие индексы есть у таблицы и что такое PK.Это может быть таблица не имеет индекса вообще, поэтому записи сравниваются по значениям полей.Также вы можете перехватить запрос в SqlProfiler, запустить его отдельно и проанализировать его план запроса.

0 голосов
/ 14 октября 2011

Что вы можете сделать - это использовать хранимую процедуру Linq из базы данных.

В этом случае это будет быстрее, потому что это механизм базы данных, который выполнит работу и вернет ее Linq; для этого создан механизм базы данных, который ближе к данным, чем Linq.

Предлагаю попробовать и оставить отзыв

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