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