Sergic
@Sergic
Scala, java, php dev

Как хранить и выбирать данные для пейджинга?

В общем, точно сформулировать вопрос не могу, просто опишу ситуацию.

Используя PHP и MySql делаю пейджинг объектов. Проблема в том, что записей несколько млн. и выборка, подсчет данных занимает относительно большое время.

Все мы обычно начинаем из подсчета числа фильтрованных данных SELECT COUNT(*), потом уже через LIMIT и OFFSET делаем запрос на объекты. И беда в том, что, даже, если есть индексы, то запросы выполняться в 10-100 раз дольше чем обычные.

Тут возник вопрос как оптимизировать? Кешировать объекты куда-то в память? Что еще использовать и как использовать? Хочется решить проблему, но я просто не представляю, что делать.

К тому же, использовать memcache, не знаю, или целесообразно для хранения count т.к. есть множество фильтров, и данные постоянно обновляются и уследить за фильтрами очень сложно.
Если кто-то сталкивался с данной проблемой, подскажите, пожалуйста. Спасибо.
--
Если использовать, к примеру, PerconaDB или включить еще сохранение промежуточных данных на MongoDb?
  • Вопрос задан
  • 2551 просмотр
Решения вопроса 1
morozovdenis
@morozovdenis
1. денормализуйте схему БД

2. дублируйте данные в таком виде что-бы было можно было эффективнее выбирать их
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@artishok
кратко
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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