Ciao, caricare 80M di righe al posto di ricaricare una query è un po' un controsenso anche perché sposti il problema dal mysql server al web server che deve essere ben carrozzato per riuscire a tenere in memoria 80M di record per ogni utente che accede a quella pagina.
Tornando al tuo problema potresti velocizzare la query in questo modo, che si basa pero' sulla necessità che tutti i record abbiano un id numerico e che ci sia un ordinamento di qualche tipo, presupponendo anche che tra un query ed un altra i dati non cambino l'ordinamento. Il modo è semplice: al posto di utilizzare solo il limit tieni traccia dell'ultimo ID restituito dalla query precedente e modificando la query fai si che questo ID sia il punto di partenza per le ricerche successive.
Per intenderci la prima volta la query sarà:
SELECT id,* from MYTABLE ORDER BY XYZ LIMIT 0,20;
La seconda volta al posto di :
SELECT id,* from MYTABLE ORDER BY XYZ LIMIT 20,20;
fai
SELECT id,* from MYTABLE WHERE ID > IDLAST ORDER BY XYZ LIMIT 0,20;
In questo modo il DB non si deve scorrere i primi 20 (o 40 o 60....) risultati per capire da quale partire per i valori nuovi da ritornarti, ma ti ritorna i primi 20 che trova.
Ah, immagino che la paginazione sia sequenziale e non "a salto", altrimenti decade tutto quello che ho detto e l'unica è usare il limit da solo.
M.