При правильном применении любое из этих трех решений подойдет для манекентинга, но имейте в виду, как бы вы относились к каждому из них в процессе миграции (перенос кода или базы данных).
Если запросбольшой, хранимая процедура даст вам немного производительности из-за меньших накладных расходов, поскольку она отправляет запрос меньшего размера.Вы также можете получить немного больше безопасности с этим решением.
Для решения manteinance я бы предпочел первое и второе решения, потому что вы можете вносить любые изменения в запрос, не делая никакихизменения базы данных.Если вы выберете 1-е решение, я бы обернул вызов запроса в функцию, чтобы у вас было только одно место для внесения изменений.
С точки зрения разработчика , я бы выбралпоскольку решение для представления является наиболее прозрачным, я имею в виду, что это просто запрос к обычной таблице, вы можете проверить структуру таблицы с помощью команды description, или просто выбрать поля и условия, которые нужно запросить, или объединить с другой таблицей и т. д...
Что касается гибкости предложения where , вы можете добиться этого с помощью любого из предложенных решений.Вы можете добавить параметр where в свою функцию обертывания (1), вы можете добавить параметр where в хранимую процедуру, но будьте осторожны с инъекциями (2), или разработчик может добавить предложение where, как обычно, с представлением (3)
Учитывая, что в представлениях MySQL нет временных таблиц, , если запрос очень сложный , эти решения не будут наилучшими, если запрос используется многократно и по-разному (отключениеповышение производительности кеша). Я бы рассмотрел временную таблицу решение (таблица счетчиков), которая обновляет каждый период времени запрограммированной задачей / хроном (например, день, неделя, когда это необходимо) или обновляется путем установки триггеров пропппера.Это решение может немного улучшить производительность.
Надеюсь, это поможет, мне больше всего нравится решение View, но, возможно, его сложнее разработать с точки зрения базы данных.