Я создаю довольно большую систему статистики, которая должна позволить пользователям запрашивать статистику для заданного набора фильтров (например, диапазона дат).Query Caching в MySQL
например. Это простой запрос, который возвращает 10 результатов, в том числе player_id и количества убивает каждый игрок сделал:
SELECT player_id, SUM(kills) as kills
FROM `player_cache`
GROUP BY player_id
ORDER BY kills DESC
LIMIT 10
OFFSET 30
приведенным выше запрос будет компенсировать результаты по 30 (то есть 3 «» страницы результатов). Когда пользователь затем выбирает страницу «Следующий», он будет использовать OFFSET 40 вместо 30.
Моя проблема заключается в том, что ничего не кэшируется, даже если пара LIMIT/OFFSET используется в одном наборе данных, это выполняя SUM() снова, просто чтобы компенсировать результаты еще на 10.
Приведенный выше пример представляет собой упрощенную версию гораздо большего запроса, который просто возвращает больше полей и занимает очень много времени (20+ секунд и будет только увеличиваться по мере роста системы).
Поэтому я ищу решение для ускорения загрузки страницы путем кэширования состояния до применения LIMIT/OFFSET.
К сожалению, это невозможно из-за фильтров запросов. Различные фильтры ДОЛЖНЫ повторить длинный запрос, с которым мне придется жить, но я просто пытаюсь исправить проблему LIMIT/OFFSET. Единственный способ, которым я мог бы использовать это, состоял бы в том, чтобы иметь несколько сводных таблиц для каждого типа фильтра, который безграничен, поскольку диапазоны дат могут быть любыми .. –
Должен быть какой-то способ правильно составить сводную таблицу, чтобы она соответствовала вашим потребностям фильтра , (возможно, добавив больше полей в сводную таблицу для всех соответствующих фильтров). –
Как? С фильтром диапазона дат количество возможных запросов безгранично! –