У меня есть стол
create table big_table (
id serial primary key,
-- other columns here
vote int
);
Эта таблица очень большая, примерно 70 миллионов строк, мне нужно запросить:
SELECT * FROM big_table
ORDER BY vote [ASC|DESC], id [ASC|DESC]
OFFSET x LIMIT n -- I need this for pagination
Как вы, возможно, знаете, когда x
- большое число, такие запросы выполняются очень медленно.
Для оптимизации производительности добавил индексы:
create index vote_order_asc on big_table (vote asc, id asc);
а также
create index vote_order_desc on big_table (vote desc, id desc);
EXPLAIN
показывает, что указанный выше запрос SELECT
использует эти индексы, но в любом случае он очень медленный с большим смещением.
Что я могу сделать для оптимизации запросов с OFFSET
в больших таблицах? Может быть, в PostgreSQL 9.5 или даже более новых версиях есть какие-то особенности? Я искал, но ничего не нашел.