@kirill-93

Какой из запросов mysql быстрее?

Всем привет, есть лента новостей, на которую вывожу новости по 20 штук, отсортированные, например, по дате. Как только человек домотал до низа, подгружаю еще 20 и так далее.
Вопрос: что быстрее, каждый раз выбирать через limit offset:
select * from posts limit 20 offset 20
Или отсылать айдишники уже подгруженных новостей и делать запрос с where not in:
select * from posts where id not in (1, 2, 3) limit 20

Вариант вида
select * from posts where id < 'id' limit 20
Не подходит, потому что сортировка идет по дате, а дата у постов может совпадать полностью.
Какой из вариантов быстрее, скажем, после прочтения 2000-го поста. Или есть еще какой-то более оптимальный вариант?
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 3
Denormalization
@Denormalization
Это экономия на спичках.
Там несколько миллионов постов или выборка по 2мин делается? Разница между обоими вариантами будет меньше, чем время на запрос до сервера.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
explain + индексы. А так - это просто баловство.
Ответ написан
Комментировать
Arris
@Arris
Сапиенсы учатся, играя.
Делайте

select * from posts limit 20 offset 20

и не парьтесь. На таблице новостей разницы нет.

Далее, я не знаю каким маньяком нужно быть, чтобы прокрутить новости до двухтысячной :)

Есть более оптимальное решение, есть. Закэшировать айдишники новостей для каждой страницы. Но в вашем случае это оверхед.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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