2010-08-28 2 views

ответ

7

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

Либо когда

  1. Процесс вы делаете не может быть переписан в виде операции на основе набора. (Например, invoking DBCC DBREINDEX in turn в списке таблиц)
  2. Операция на основе набора имеет более сложную асимптотическую сложность. Для запуска агрегатов решение на основе набора имеет квадратичную сложность, тогда как рабочая нагрузка курсора растет линейно.

Для этого последнего случая использование SQL CLR solution происходит значительно быстрее, чем при использовании стандартного курсора.

2

Пожалуйста, прочитайте: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

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

+0

Хотя по принципу согласен, я бы не сказал «вся карьера». Несколько раз его проще и быстрее использовать курсор, чем искать способ вокруг них. Если вы можете сделать это с помощью курсора за пятнадцать минут вместо того, чтобы потратить полдня на другие альтернативы, почему бы и нет? Конечно, при условии, что реализация курсора достаточно быстрая, но до сих пор это никогда не было проблемой для меня. – Carlos

+0

@ carlos, если вы знакомы с техникой, описанной в ссылке, почти всегда быстрее писать решение без курсора. Код будет короче, проще и проще для mainatin. Скорость разработки - только предлог, указывающий, что вы не компетентны в кодировании SQL. – HLGEM

+0

@HLGEM как насчет курсора внутри другого курсора? Могу ли я использовать то же самое без курсора так быстро, как с ними? – Mucida

-1

Вот немного информации прямо из Oracle:

КРАТКОЕ РУКОВОДСТВО ДЛЯ ИСПОЛЬЗОВАНИЯ В ТЕЧЕНИЕ явных курсоров SQL * Forms 3.0
~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Многие пользователи воспринимают Явные Курсоры как трудные средства извлечения данных из базы данных. На самом деле требуется лишь несколько базовых понятий для реализации этого гибкого метода, таким образом, максимизируя эффективность и управление разработчиком .

Курсор - это именованный оператор SQL. Из Руководства и в PL/SQL Справочное руководство пользователя (страница 2-16):

Если запрос возвращает несколько строк, вы можете явно определить курсор на:

  • процесса за пределы первой строки, возвращаемой запрос
  • отслеживать, какая строка в данный момент обрабатывается.

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

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

+2

Не могли бы вы сослаться на соответствующие документы и поместить цитируемый текст в блоке, так что ясно, какая часть текста является цитатой, а какая ваша - – Dhara

+2

Согласовано - если вы собираетесь указывать официальную документацию, важно предоставить ссылку на источник, как для целей дальнейшего чтения И надлежащий кредит автору. –

Смежные вопросы