MySQL - Функция или часть запроса

Модератор: Модераторы

Ответить
S_Gur
постоялец
Сообщения: 136
Зарегистрирован: 30.12.2018 21:17:42

MySQL - Функция или часть запроса

Сообщение S_Gur »

Доброго времени суток. Задача вкратце такая. Сервер MySQL 8. Есть некий список клиентов. Каждый месяц у этого клиента может быть 0, 1 или несколько неких услуг. Нужно сделать отчет за 12 месяцев, в котором будет имя клиента и список этих услуг в строку - с использованием функции Group_Concat. Запрос на список этих услуг на каждого клиента на заданный месяц тоже не простой - из двух таблиц. Отсюда вопрос: как оптимальнее будет организовать представление - обычный селект (соответственно, с подключением 12 раз по две этих таблицы в секцию From), вложенные запросы на каждый месяц или функция, которая принимает в качестве параметра клиента и месяц и возвращает строку услуг через какой-то сепаратор
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Я бы реализовал встроенной функцией - из тех элементарных соображений, что функция выполняется сервером, который всегда быстрее клиентской машины, особенно с учетом времени на прохождение запросов/ответов по сети.
S_Gur
постоялец
Сообщения: 136
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

Снег Север, дело не в клиентской машине. Это в любом случае будет вьюха - то есть, в итоге, один селект, выполняющийся как раз на сервере. Но уж больно он тяжелый получается, вот я и пытаюсь его как-то оптимизировать
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Вполне может оказаться, что выгоднее запустить несколько запросов в цикле функции, чем один селект. а вообще - профайлинг вам в помощь:
https://habr.com/ru/articles/70435/
Ответить