SerjikZ123
@SerjikZ123

Стоит ли оптимизировать запросы?

Доброго времени суток!

Столкнулся со следующей ситуацией. Разрабатываю проект на Yii2, есть связанные таблицы MySQL, из которых нужно достать данные и обработать.
1) Таблица 1.
id | col1

2) Таблица 2.
id | tbl1_id | col1

3) Таблица 3.
id | col1

4) Таблица 4.
id | tbl2_id | tbl3_id

Для доступа к данным используется ActiveRecord и таблицы связаны через $this->hasMany, $this->hasOne, ничего необычного.
Суть вопроса заключается в самой обработке. Мы получаем массив объектов из Тбл.1 и циклом идем по нему. Для каждого из объектов подключаем данные из Тбл.2 , а для каждого из них данные из Тбл.4 посредством связи с Тбл.3. Как итог, при одном открытии сайта уже более 60 запросов к БД, причем большая их часть просто SELECT FROM WHERE id=#, т.е. элементарные.
Кто имеет опыт работы с подобными связями, посоветуйте, что лучше: оставить как есть (много простых запросов и разброс по отдельным классам с ActiveRecord), или же объединение запросов в более сложные с JOIN ? Интересует не только скорость работы, но и нагрузка на сервер. Так ли долго выполняются простые запросы, что имеет смысл что-либо делать? И какое кол-во запросов при одной загрузке сайта допустимо (в рамках разумного смысла) ?
  • Вопрос задан
  • 494 просмотра
Решения вопроса 1
Здесь "проблема N+1", нужно использовать жадную загрузку, но вообще далеко не всегда один сложный запрос лучше нескольких мелких (см. Bill Karwin "SQL Antipatterns" глава 18)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Всегда лучше делать 1 большой запрос чем кучку мелких. Только не надо тащить все подряд с базы, а потом уже фильтровать,сортировать и отбирать то что нужно
Ответ написан
Pjeroo
@Pjeroo
Веб-разработчик
Однозначно стоит делать оптимизацию, хотя тут даже не оптимизация, а скорее просто адекватное использования БД. 60 запросов на открытие страницы это, мягко скажем, дохренища. Получается у вас 1 пользователь делает 60 запросов к базе, 60 операций трансфера от сервера бд до сервера пхп. Есть один сайт у знакомого - там тоже куча запросов к базе на просто загрузке главной страницы - не скажу 60 или не 60, но обычный ab его кладет на лопатки.
Ответ написан
art_karetnikov
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Доброго. Откажитесь от ActiveRecord в данном случае, используйте DAO и сделайте предварительную обработку на сервере сразу.
Ответ написан
Ваш ответ на вопрос

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

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