@Wade2k

Как сделать быструю пагинацию с сортировкой по дате?

Приветствую.
Нужно сделать быструю пагинацию по таблице комментариев на сайте по дате
В таблице всего 450тыс комментариев

Таблица вида
id - int|comment - varchar|dt - date

Выбор страницы
SELECT * FROM comment order by dt desc LIMIT 50 OFFSET {page*50}


На первых страницах это все быстро работает, но когда offset становится большим, все начинает безбожно тормозить

Индекс на dt есть, но в explain он не попадает

Как сделать такую паганицию быстрой? С учетом того, что комментарии бывают удаляются и просто сделать SELECT * FROM comment WHERE id > {page*50} LIMIT 50 не получится?

Остается держать страницы пагинации и idшники для каждой странице в каком нибудь кеше?

Или я что то упустил?
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 3
@nickerlan
Навскидку
SELECT * FROM comment WHERE id > {LAST_COMMENT_INDEX} LIMIT 50

Где LAST_COMMENT_INDEX это индекс последнего коммента с предыдущей страницы
Ответ написан
inoise
@inoise
Solution Architect, AWS Certified, Serverless
mysql на больших объемах может игнорировать строковые индексы (да-да индекс по datetime строковый в целом). Есть 2 варианта:
- попробовать сделать индекс по отдельному полю с unix_timestamp (с int все должно прокатить по идее)
- запихать в индекс все поля, которые вы получаете в запросе (тогда вы не оставите ему выбора, но индекс будет значительно более тяжел)
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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