Немного теоретического вопроса здесь.
Я создал интерфейс поиска в базе данных для веб-сайта ASP.NET.Я использую linq to sql для операций BL.Я искал разные способы реализации эффективного пейджинга и думаю, что сейчас у меня есть лучший метод, но я не уверен, насколько велика разница в производительности, и мне было интересно, есть ли у каких-либо экспертов какие-либо объяснения / советы, которые можно дать?
МЕТОД 1: Традиционный метод, который я видел во многих руководствах, использует чистый linq to sql и, похоже, создает один метод для получения данных.И затем один метод, который возвращает счетчик на пейджер.Я предполагаю, что это можно сгруппировать в одном методе, но, по сути, в результате получается, что создается IQueryable, который содержит данные для всего запроса, а затем выполняются IQueryable.Count () и IQueryable.Skip (). Take ().
Я видел некоторые сайты, критикующие этот метод, потому что он вызывает оценку двух запросов, что, очевидно, не так эффективно, как использование хранимой процедуры ... Так как я в любом случае использую полнотекстовый поиск, мне нужно было написатьSP для моего поиска, поэтому в свете предыдущих комментариев я решил сделать пейджинг и считать в SP.Итак, я получил:
МЕТОД 2: вызов хранимой процедуры из BL.В SP предложение WHERE собирается в соответствии с полями, указанными пользователем, и создается динамический запрос.Результаты динамического запроса вставляются в табличную переменную с временным ключом идентификации, для которого я выполняю COUNT (*) и SELECT WHERE (temp_ID> = x и temp_ID
Это выглядит мнекак эти два метода в принципе выполняют одни и те же операции ...
Мне было интересно, действительно ли метод 2 более эффективен, чем метод 1 (независимо от того, что полный текст не доступен в linq to sql ...).И почему?И на сколько?В моем понимании, SP требует, чтобы запрос был сгенерирован только один раз, так что это должно быть более эффективным.Но какие еще преимущества есть?
Существуют ли другие способы эффективной подкачки?