Linq и большая база данных Count

206
06 мая 2017, 18:47

Не могe решить проблему с подсчетом размера коллекции. Есть таблица на сайте с фильтрами, там выводиться 10 записей.

 data = dc.books.OrderBy(x => x.id).Where(x =>
                                 (market_id == 0 || x.market_id != 0 && x.market_id == market_id)
                                 && (name == null || x.name != null && (x.name.StartsWith(name)))
                                 && (author == null || x.author != null && (x.author.StartsWith(author)))
                                 ).Skip(param.Start).Take(10).ToList();

Все быстро и хорошо работает. Ну мне нужно подсчитать размер полученной коллекции.

               count = db.books.Count(x =>
                (market_id == 0 || x.market_id != 0 && x.market_id == market_id)
                && (name == null || x.name != null && (x.name.StartsWith(name)))

При одном условии все работает быстро, но стоит мне добавить два других условия, как все вешается. База на Mysql ~ 500 000. Ка мне решить эту задачу , пожалуйста помогите.

Answer 1
  1. Сделайте составной запрос - сначала сделайте легкую выборку на основные фильтры, а потом в результате сделайте фильтр по x.name.StartsWith(name) Именно этот запрос нагружает MySql. Уменьшив набор данных для его работы вы облегчите задачу для сервера.
  2. Попробуйте прямой SQL запрос.
READ ALSO
Ссылка на партнёра

Ссылка на партнёра

Имеется плагин, который парсит записи с сайта-партнёра, и сохраняет эти записи в новом произвольном типе, допустим custom_type

289
Можно получить критику кода проекта? [требует правки]

Можно получить критику кода проекта? [требует правки]

Привет ребят, хочу попросить более опытных колег посмотреть и высказать критику кода, что бы я мог узнать больше и исправитьсяВот моё приложение

213
Можно ли в switch-case сверять с массивом?

Можно ли в switch-case сверять с массивом?

Возник такой вопросПишу бота-помощника для сайта и нужно анализировать фразы посетителей, но их может быть великое множество вариаций, поэтому...

261
Python Списки \ массивы

Python Списки \ массивы

Здравствуйте! В PHP массив можно записать таким образом:

217