Fare una query separata non è una buona soluzione (secondo me) perché il server cercherà due volte le righe per un set di risultati.
Per evitare query "doppie" MySQL ha la funzione FOUND_ROWS(), restituisce un numero di righe trovate per le condizioni correnti da WHERE
clausola. Questo è molto utile quando usi LIMIT e OFFSET nella query. Credo che l'utilizzo di questa funzione sia una soluzione migliore.http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows
Avevo letto qualche tempo fa che JDBC trasmette le righe dal server, ma questa non era documentazione ufficiale e non posso dire come funziona al presente, ma le query possono essere diverse, con sottoquery e join difficili. Penso che il server possa completare tutte le risorse se "trasmetterà in streaming" queste righe solo quando il client le ha richieste.