В большинстве драйверов для большинства реляционных баз данных предпочтительным и по умолчанию способом доступа к результатам является использование курсора или итератора.
Я предполагаю, что база данных делает что-то вроде:
Каждый раз, когда драйвер базы данных получает вызов для получения следующего результата, он передает этот курсор в базу данных, которая дает следующий результат.
Однако я не уверен, что это действительно так. Меня удивляет то, что если клиент базы данных и сервер базы данных находятся на разных узлах и обмениваются данными по сети, разве это не медленно? Неужели он использует такой ленивый подход? Имеет смысл не возвращать все данные, но есть ли какой-то средний путь?