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

У меня есть таблица историй с большим количеством данных, мне надо достать определенные строки, определенного пользователя. На ларавель запрос выглядит так:
latest('id')
            ->where('user_id', '=', $userId)
            ->whereIn('type_id', [
                HistoryType::WRITE_OFF,
                HistoryType::WRITE_ON,
                HistoryType::MAGIC,
            ])
            ->limit(100)
            ->get();

На sql так:
select * from `histories` where `user_id` = '1' and `type_id` in (5, 4, 6) order by `id` desc limit 100
Запрос простой, но не знаю как оптимизировать. Возможно ли это сделать без добавления индексов на столбцы, так как размер таблицы сильно увеличится
  • Вопрос задан
  • 420 просмотров
Решения вопроса 1
ma4akk
@ma4akk
В данном случае, чтобы оптимизировать запрос, можно использовать следующие методы:

1 Добавить индексы на столбцы user_id и type_id, чтобы ускорить поиск данных по этим параметрам.

2 Использовать оператор LIMIT для ограничения количества выбираемых данных, чтобы уменьшить нагрузку на сервер.

3 Использовать оператор WHERE для фильтрации данных по необходимым критериям, чтобы избежать лишней обработки данных.

4 Использовать параметр кеширования для сохранения результатов запроса в памяти, чтобы ускорить получение данных при повторных запросах.

Также рекомендуется провести профилирование запросов и использовать специальные инструменты, такие как EXPLAIN, чтобы определить причины медленной работы запроса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Dmtm
Android
разбить на несколько таблиц, по году в каждой и запрос направлять в нужную
Ответ написан
Комментировать
@KoreanGuy
Можешь попробовать тип сделать одним числом-битовой строкой
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы