SQL - Какой быстрый и менее жадный способ выделить последние строки в большой таблице? - PullRequest
0 голосов
/ 03 января 2019

У меня большая таблица сообщений. Что я хочу сделать, чтобы улучшить производительность и время загрузки страницы, чтобы получать последние опубликованные сообщения, скажем, 20 последних сообщений.

Когда пользователи прокрутят вниз, предыдущие 20 сообщений будут добавлены в DOM благодаря JS.

Таким образом, если у меня всего 40 сообщений, будут отображаться сообщения от 40 до 20. Пользователь будет прокручивать страницу вниз, затем к DOM будет добавлено от 20 до 0 сообщений.

Проблема в том, что если я сохраню самый низкий идентификатор из моих загруженных сообщений и использую запрос, подобный этому:

SELECT * FROM messages ORDER BY id DESC LIMIT 20,20 (<= is the lowest offset of loaded messages)

Я прочитал, что MySQL сначала извлечет каждую строку таблицы, а затем просто вернет нужные мне записи, что, я думаю, займет довольно много времени, если моя таблица сообщений будет содержать 500 000 записей.

Какой самый эффективный и быстрый способ сделать это?

1 Ответ

0 голосов
/ 03 января 2019

Таким образом, в основном то, что вы хотите сделать, называется «Ленивая загрузка», поскольку он будет загружать записи только тогда, когда это потребуется.

Лучший способ - отправить последний идентификатор загруженной записи.,Допустим, это был id 1988.

Тогда вы можете запросить как

SELECT * FROM messages WHERE id < 1988 ORDER BY id DESC LIMIT 20

следующий запрос, вероятно, будет выглядеть как

SELECT * FROM messages WHERE id < 1968 ORDER BY id DESC LIMIT 20

и так далее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...