Как оптимизировать пагинацию (node, mysql)?

Есть некий исходный запрос Q, сейчас я делаю
1) select count(*) as total from (select * from (Q) t)
2) Q limit ? offset ?
Из-за этого время выполнения увеличивается минимум в 2 раза.
Если делать пагинацию программно - что-то вроде _.drop(data, offset).slice(0, pageSize) - то выходит быстрее, но если там пара миллионов строк - то, наверное, это плохое решение.
Какие существуют хорошие практики для пагинации? В идеале хотелось бы, чтобы total и все остальное выполнялись за 1 запрос и чтобы mysql как-то кэшировал результаты для запросов, где меняется только offset...
Или все же правильно делать пагинацию на стороне ноды?
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Вы не поверите, но mysql умеет и кэширует запросы. Но в вашем случае либо проблема в таблице (индексы), либо в данных (если там text то прощай индексация). В любом случае прочитайте explain и если там нет проблем или вас ничего не смутило - кэшируйте результаты в memcached, например, самостоятельно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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