изменить порядок строк возвращаемый select

Есть большая, постоянно пополняемая таблица.
select * from t1 limit 100;
возвращает строки в порядке их записи, т.е. сверху самая первая. запрос выполняется быстро.

select * from t1 order by time desc limit 100;
перелопачивает всю таблицу и выполняется очень медленно.

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

Спасибо.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Ни один SQL-сервер. в том

Ни один SQL-сервер. в том числе и PostgreSQL не гарантирует вам порядка следования строк при выборке из таблицы, в отсутствии применения ORDER BY. То что вам без ORDER BY выдаёт по порядку - всего-лишь случайность и ничего более. Рассчитывать на такое поведение PostgreSQL в дальнейшем нельзя.

Чтобы ускорить выдачу строк, при применении ORDER BY, рекомендую попробовать создать индекс на поле, по которому делаете ORDER BY. Другим возможным способом получить последние 100 строк из таблицы может оказаться использование триггеров и создание временной таблицы, хранящей только 100 последних записей.

Ясно. Спасибо. К сожалению

Ясно. Спасибо.
К сожалению индекс замедляет запись. Да и триггеры.

Всё-равно это будет быстрее,

Всё-равно это будет быстрее, чем выполнять тяжёлый запрос на большую таблицу с ORDER BY. Тем более, что насколько я помню, триггеры можно сделать асинхронными.
Вообще-то, конечно, многое зависит от того, что вам конкретно нужно. Вариантов много.
Например, если выдача последних 100 строк допускает задержку скажем в минуту и больше, то можно организовать выгрузку 100 последних строк в кэш-таблицу с заданным периодом кэширования. Если при следующем запросе 100 записей кэш протух - удаляем записи кэш-таблицы и создаём их заново по свежим данным, если нет - отдаём содержимое таблицы, что будет практически мгновенным.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023