Skorzystaj z pierwszej sugestii. Ten z offsetami. To „standardowy” sposób tworzenia stronicowania. Umieszczenie całego zestawu wyników w sesji byłoby złym pomysłem, ponieważ każdy użytkownik miałby swoją prywatną kopię danych. Jeśli napotkasz problemy z wydajnością, zawsze możesz dodać pamięć podręczną (memcache), która przyniesie korzyści wszystkim użytkownikom uzyskującym dostęp do danych.
MySQL zawsze będzie generować Twoje dane w ten sam sposób. Jedynym sposobem, w jaki rekord ze strony 1 pojawi się na stronie 2, jest wstawienie nowego rekordu między momentem przejścia użytkownika ze strony 1 na stronę 2. Innymi słowy:nie masz się czym martwić.
Zasób w przypadku MySQL jest rodzajem wskaźnika, który wskazuje na zestaw wyników. Następnie możesz tym manipulować (pobieranie danych wiersz po wierszu, liczenie liczby zwróconych wierszy itp.). Nie jest globalny.