@Vadik7777

Как можно сделать запрос и максимально быстро вывести количество записей во всех категориях на одной странице?

Всем привет!

Есть таблица MySQL в которой больше 10 миллионов записей.
Как можно сделать запрос и максимально быстро вывести количество записей во всех категориях на одной странице?
Делаю запрос подобным образом:
$subQuery = '(SELECT count(id) FROM note WHERE note.category_id = category.id) as post_count';
$categories = Category::query()->select(['id', 'name'])->selectRaw($subQuery)->get();

В итоге запрос обрабатывается долго, страница прям секунд 10, а то и больше грузит эту стату.
Кто подскажет, как вывести прям моментально данные на страницу?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
А чем не устроил withCount? Если он также тормозит, то можно провести денормализацию: добавить поле-агрегатор в таблицу категорий (или в отдельную таблицу с отношением 1 к 1) и обновлять его при добавлении/удалении подчиненной модели в обработчике события https://laravel.com/docs/8.x/eloquent#events-using... все-таки чтение этой информации будет происходить явно в десятки/сотни раз реже изменения.

Ну и дополнительный вопрос: а есть ли индекс по category_id? А то разное бывает.
Ответ написан
Ваш ответ на вопрос

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

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