Използвайте първото си предложение. Този с компенсациите. Това е "стандартният" начин за извършване на пагинация. Поставянето на целия набор от резултати в сесия би било лоша идея, тъй като всеки потребител ще има свое лично копие на данните. Ако срещнете проблеми с производителността, винаги можете да добавите кеширане (memcache), което ще е от полза за всички потребители, които имат достъп до данните.
MySQL винаги ще дава вашите данни по един и същи начин. Единственият начин, по който запис от страница 1 ще се появи на страница 2, е ако е вмъкнат нов запис между времето, когато потребителят преминава от страница 1 към страница 2. С други думи:няма за какво да се притеснявате.
Ресурсът в случая на MySQL е своеобразен указател, който сочи към набора от резултати. След това можете да манипулирате това (извличане на данни ред по ред, преброяване на броя на върнатите редове и т.н.). Не е глобален.