user_of_toster
@user_of_toster

10-15 join'ов в одном запросе — антипаттерн?

Является ли 10-15+ джоинов в рамках одного запроса признаком плохого проектирования БД или неправильного выбора в пользу реляционных БД в целом? Или для реляционных БД это норма?

Скорость запросов, хоть и не самая быстрая, пока что устраивает, но киллометровый запрос вызывает сомнение. С другими БД, кроме реляционных плотно не работал, но что-то подсказывает что есть решение, которое 1) укоротит киллометровые нечитабельные запросы; 2) оптимизирует время выполнения
  • Вопрос задан
  • 153 просмотра
Решения вопроса 3
tsklab
@tsklab
Здесь отвечаю на вопросы.
укоротит километровые нечитабельные запросы
Используйте макросы, тьфу, представления.
оптимизирует время выполнения
Используйте хранимые, тьфу, индексируемые представления. И хранимые, точно, вычисляемые поля.
Это для одновременного 1+2. Для остального — другой вопрос с текстом запроса (за картинку — эцих с гвоздями) и тегом Оптимизация SQL-запросов.
Ой, а если у вас это для отчётов или аналитики, то стоит посмотреть OLAP.
Ответ написан
@Akela_wolf
Extreme Programmer
10-15 - это как-то много. Скорее всего является признаком что БД слишком мелко раздроблена на таблицы. Хотя многое зависит и от самого запроса, скажем для аналитики (построения отчета) у меня на одной из прошлых работ считалось нормой. Тут главное чтобы оптимизатор строил адекватный план запроса и джойны шли с использованием индексов, тогда будет работать быстро, даже при большом объеме данных
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Не является
Нет не норма, но и чем-то выходящим из ряда вон не является, бывает и больше.
К оптимизации времени выполнения вообще никакого отношения не имеет.

Абстрактный вопрос "в попугаях" задавать бессмысленно.
Сейчас он выглядит как "можно ли строить дом в 10-15 этажей?"
Если это железобетонный дом по нормальному проекту, то нормально.
Если это сарай у дедушки на даче, то ненормально.
Надо либо привести конкретный запрос либо рассуждать об абстрактных материях в одиночестве.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Senior .NET developer
а зачем вам столько данных?
Если для аналитики то норм. А если для простых списков то что то пошло не туда
Ответ написан
Комментировать
Adamos
@Adamos
Нельзя анализировать код, не задавая себе вопроса "зачем"?
Если данные действительно сложно связаны и без этих джойнов никак - тут дело не в запросе, а в задаче или архитектуре.
А если джойнов намешано, просто чтобы вместо пяти запросов делать один, и они легко разделяются - имеет смысл сравнить оба варианта, возможно, это попытка "человеческой" оптимизации, которая на самом деле только мешает БД кэшировать часто запрашиваемые данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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