О выборе типа курсора

Выбор типа курсора зависит от нескольких переменных, включая:

  • размер результирующего набора;

  • процент необходимых данных;

  • производительность открытия курсора;

  • потребность в операциях с курсором, таких как прокрутка или выполнение нацеленных обновлений;

  • уровень видимости изменений данных, внесенных другими пользователями.

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

Если все полученные данные будут использоваться сразу и не будет потребности в позиционированных обновлениях или прокрутке, то рекомендуются результирующие наборы по умолчанию. При использовании режима MARS SQL Server удаляет ограничения, запрещавшие наличие нескольких необработанных результирующих наборов по умолчанию.

Правила выбора типа курсора

При выборе типа курсора придерживайтесь следующих правил.

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

  • Используйте настройки по умолчанию при выборке для клиента всего результирующего набора, например при формировании отчета. Результирующие наборы по умолчанию обеспечивают самую быструю передачу данных клиенту.

  • Результирующие наборы по умолчанию не могут быть использованы, если приложение использует нацеленные обновления.

  • Результирующие наборы по умолчанию должны использоваться для всех инструкций Transact-SQL или пакетов инструкций Transact-SQL, которые будут формировать несколько результирующих наборов.

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

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

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

  • Статические и управляемые набором ключей курсоры увеличивают использование базы данных tempdb. Статические серверные курсоры строят в базе данных tempdb полный курсор; курсоры, управляемые набором ключей, строят в базе данных tempdb набор ключей.

  • Если курсор должен оставаться открытым во время операции отката, используйте статический синхронный курсор и установите параметр CURSOR_CLOSE_ON_COMMIT в значение OFF.

При использовании серверных курсоров каждое обращение к функции или методу выборки API приводит к обращению к серверу. Приложение должно оптимизировать эти обращения, используя блочные курсоры с достаточно большим количеством строк, возвращаемых при каждой выборке.

См. также

Основные понятия