@kirill-93

Отказаться от group by и sort by?

Везде написано, что group by и sort by очень дорого обходятся в плане производительности.
В explain сразу появляются using temporary и using filesort в поле extra.
При этом "узким горлышком" производительности веб приложений как правило является именно БД.
Имеет ли смысл сортировать и группировать результаты выборки с помощью ЯП, чтобы убрать сортировку и группировку из запросов?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 5
un1t
@un1t
Нет. При наличии правильных индексов будет работать быстро. На ЯП ты еще добавишь задержки на передачу данных и парсинг.
Узким местом не всегда является БД. Зависит от многоих факторов.
Ответ написан
savostin
@savostin
Еще один программист
У Вас быстро закончится память, т.к. вся таблица (а скорей всего не одна) будет сохраняться в ОЗУ.
Ответ написан
Комментировать
При этом "узким горлышком" производительности веб приложений как правило является именно БД.

Логично, ведь большинство веб-приложений это выборка с некоторой простой обработкой. А БД не все умеют хорошо спроектировать.
Имеет ли смысл сортировать и группировать результаты выборки с помощью ЯП, чтобы убрать сортировку и группировку из запросов?

Это имеет смысл только если у вас вообще нет индексов, и по каким-то непостижимым причинам вы не можете их добавить. Чтобы отсортировать быстрее СУБД, нужно построить индекс самому, а вы вряд ли сделаете это лучше СУБД, еще и так, чтобы покрыть расходы на передачу данных. Группировку имеет смысл только если агрегирующая функция вычислительно очень сложная, но такое вы скорее всего в SQL запросе писать и не будете.

Даже если у вас sort и group действительно занимают основной процент времени, перенос этих операций в код приложения врядли вам поможет. Иначе говоря, пока вы добьетесь приемлемого результата от такого решения, вы добрую часть алгоритмов СУБД перепишите заново (сначала вы напишите индексы для поиска или сортировку слиянием, потом, как заметил Сергей Савостин у вас всё равно данные не будут влезать в ОЗУ и вы захотите писать их на диск, тут же вашу копию данных в приложении нужно будет синхронизировать и вы начнёте писать примитивную репликацию и так далее..)
Ответ написан
Комментировать
Не реально переложить сортировку на ЯП, вы просто не сможете выбирать нужные данные да и на больших объемах данных это просто не реально. Просто ставьте индекс и всё.
Ответ написан
Комментировать
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Не на том заморочился.

Оптимизируй количество сортируемого/групируемого правильным WHERE и индексами, а по сети таскать да в скрипте молотить это идея так себе.

Кстати про сеть и память, рекомендую таскать только самые необходимые поля, а не SELECT * как обычно делают...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы