Как оптимизировать скорость таблицы?

В общем есть таблица учеников:
spoiler

5ddf6e1450a43250053132.png

Столбец "Обучение" содержит в себе выборку из БД из таблицы, где назначены обучения ученику. А также подтягиваем последний комментарий к ученику из таблицы с комментами.
У меня возник вопрос, как можно оптимизировать скорость загрузки таблицы? (отказаться от плагина dataTables пока не можем)

По поводу того, как сейчас это реализовано:
Создаю массив $students.
Я получаю сразу всех студентов, потом запускаю цикл обходя каждого.
В $students[$i] переношу данные студента,
туда же ($students[$i]['groups] ), сделав запрос к БД, добавляю все назначения на курсы (а у курсов еще и проверяем сколько платежей за обучение было, запрашивая данные из БД таблицы `payments`)
тоже ($students[$i]['last_comment]) и с комментариями.

База данных mysql, InnoDB

Сейчас у нас почти 600 учеников, у каждого из них по 2-3 курса, на которых они учатся, и таблица грузится целых 3 секунды. А что будет, если учеников будет за 10к?
Подскажите, как можно все это оптимизировать?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
TheRonCronix
@TheRonCronix
Замечательный пример того, как не нужно делать. Все можно и нужно выбрать одним запросом. Про индексы не говорю, для единичных выборок они нужны, для полной выборки - скорее нет.
Как минимум стоит открыть клиент какой-нибудь и пописать там sql-запросы, делающие нужные вам выборки. Посмотреть планы выполнения, там уже решать, что требует оптимизации.
Ответ написан
Комментировать
Смотреть где узкое место.
бд долго отдает? Создавать индексы.
Или может у вас вместо одного-двух запросов 1200? Тогда разбираться с join и оптимизировать запросы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
solotony
@solotony
покоряю пик Балмера
для начала поставьте https://github.com/barryvdh/laravel-debugbar
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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