Как работает «курсор» базы данных?

В большинстве драйверов для большинства реляционных баз данных предпочтительным и по умолчанию способом доступа к результатам является использование курсора или итератора.

Я предполагаю, что база данных делает что-то вроде:

  1. Выполняет запрос.
  2. Подготавливает результат, сохраняет его в ОЗУ?
  3. Возвращает курсор для результата клиенту.

Каждый раз, когда драйвер базы данных получает вызов для получения следующего результата, он передает этот курсор в базу данных, которая дает следующий результат.

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

14
задан Vanwaril 18 February 2011 в 04:18
поделиться