Как получить последние N записей без использования ORDER BY & OFFSET?
Друзья всем привет, имеется таблица с личными сообщениями, выборка идет по ID диалога, нужно получить последние 20 сообщений не используя ORDER и OFFSET, так как такой запрос будет оч плохо выполняться на большой базе, какой вариант вы видите?
У самого пока только одна идея пришла в голову во время составления вопроса.
Так как есть еще таблица диалогов, там хранятся инфа о диалоге кто с кем, ID последнего сообщения и количество всего.. думаю добавить туда еще одно поле ID последнего 20го сообщения, то есть как первое сообщение отправляется сразу записывается в таблицу с диалогами ID этого 20го, он же пока первый.. Далее держать где то в мемкеше счетчик и считать до 20ти, потом обновлять этот prev20 ID и делать выборку where ID > prev20
ORDER BY на обычных autoincrement ID замечательно работают при наличии индексов даже на миллионах записей... Не вижу причин отказываться от ORDER BY id DESC LIMIT 20
я тоже провел тест на локальном слабеньком ноуте, но это не суть главное в сравнении..
забил таблицу сообщениями, 150т записей.. запускаю одновременно скрипт на генерацию новый сообщений с паузой 1сек после записи, чтоб сбрасывался кеш.. делаю выборку последних сообщений
SELECT id, content FROM messages WHERE id > 145775 AND dialog_id=60 ORDER BY id DESC LIMIT 20 запрос занимаем то 0.001 мс то 0.0225 мс..
затем тоже самое делаю без ORDER BY, запросы выполняются за 0.0031, то есть почти в 10 раз быстрее