Ето как се справям с това. За първата страница, която извличам, използвам
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
След това в моята клиентска програма (node.js) улавям id
стойност от последния ред на набора от резултати. Когато имам нужда от следващата страница, правя това.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
Това използва индекса. И работи правилно, дори ако сте изтрили някои редове от таблицата.
Между другото, вероятно искате низходящ индекс, ако първата ви страница за пагинация има най-големите идентификатори. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Професионален съвет SELECT *
е вредно за производителността на големи бази данни. Винаги изброявайте колоните, от които наистина се нуждаете.