Является ли 10-15+ джоинов в рамках одного запроса признаком плохого проектирования БД или неправильного выбора в пользу реляционных БД в целом? Или для реляционных БД это норма?
Скорость запросов, хоть и не самая быстрая, пока что устраивает, но киллометровый запрос вызывает сомнение. С другими БД, кроме реляционных плотно не работал, но что-то подсказывает что есть решение, которое 1) укоротит киллометровые нечитабельные запросы; 2) оптимизирует время выполнения
Используйте хранимые, тьфу, индексируемые представления. И хранимые, точно, вычисляемые поля.
Это для одновременного 1+2. Для остального — другой вопрос с текстом запроса (за картинку — эцих с гвоздями) и тегом Оптимизация SQL-запросов.
Ой, а если у вас это для отчётов или аналитики, то стоит посмотреть OLAP.
офигеть совет. "если появился хщник, то надо воткнуть голову в песок. если страус не видит хищника, то и хищник его не видит"
если 100500 запросов спрятали во view, то их как бы и нету, да?
10-15 - это как-то много. Скорее всего является признаком что БД слишком мелко раздроблена на таблицы. Хотя многое зависит и от самого запроса, скажем для аналитики (построения отчета) у меня на одной из прошлых работ считалось нормой. Тут главное чтобы оптимизатор строил адекватный план запроса и джойны шли с использованием индексов, тогда будет работать быстро, даже при большом объеме данных
Не является
Нет не норма, но и чем-то выходящим из ряда вон не является, бывает и больше.
К оптимизации времени выполнения вообще никакого отношения не имеет.
Абстрактный вопрос "в попугаях" задавать бессмысленно.
Сейчас он выглядит как "можно ли строить дом в 10-15 этажей?"
Если это железобетонный дом по нормальному проекту, то нормально.
Если это сарай у дедушки на даче, то ненормально.
Надо либо привести конкретный запрос либо рассуждать об абстрактных материях в одиночестве.
Нельзя анализировать код, не задавая себе вопроса "зачем"?
Если данные действительно сложно связаны и без этих джойнов никак - тут дело не в запросе, а в задаче или архитектуре.
А если джойнов намешано, просто чтобы вместо пяти запросов делать один, и они легко разделяются - имеет смысл сравнить оба варианта, возможно, это попытка "человеческой" оптимизации, которая на самом деле только мешает БД кэшировать часто запрашиваемые данные.