Oto jak sobie z tym radzę. Na pierwszej pobranej stronie używam
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
Następnie w moim programie klienckim (node.js) przechwytuję id
wartość z ostatniego wiersza zestawu wyników. Kiedy potrzebuję następnej strony, robię to.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
To wykorzystuje indeks. I działa poprawnie, nawet jeśli usunąłeś niektóre wiersze z tabeli.
Nawiasem mówiąc, prawdopodobnie potrzebujesz indeksu malejącego, jeśli Twoja pierwsza strona ma największe identyfikatory. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Wskazówka dla profesjonalistów SELECT *
jest szkodliwy dla wydajności w dużych bazach danych. Zawsze wymieniaj kolumny, których naprawdę potrzebujesz.