A resposta usual é:seus dados buscam diretamente no array
PDOStatement::fetchAll
... Mas é ERRADO SE a consulta buscar muitos dados (!). Existem 2 soluções reais,
1) se o banco de dados permitir, use
PDO::FETCH_ORI_ABS
ou PDO::FETCH_ORI_REL
,exemplo, $result = $sth->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 973);
(EDIT) Mas, como comentado por @ChoiZ, tem uma limitação PDO-MySQL :"O MySQL não suporta cursores " (fora programas armazenados) "e o driver não pode emulá-los para você"... Tente mais tarde ou com forks do MySQL, como MariaDB.
2) use a solução de banco de dados (uma espécie de paginação). Exemplo:
SELECT a, b FROM table LIMIT 1, 973