Схема работы хранимой процедуры в БД - набор на основе курсора на основе курсора - PullRequest
0 голосов
/ 18 июня 2011

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

Может кто-нибудь дать краткое объяснение, почему это так?

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Как можно более кратко:

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

Как правило, существует фиксированная стоимость ресурсов (которая может быть довольно высокой) для одной атомарной операции в двигателе, независимо от того, затрагивает ли она 1 или 1 000 000 строк.

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

* будет несколько крайних случаев / классов проблем (которые будут зависеть от вашей СУБД), в которых процедурная логика будет работать лучше, чем на основе множеств.

0 голосов
/ 18 июня 2011

Все (или почти все) RDMS оптимизированы для операций на основе множеств, а не на основе строк. В большинстве случаев решение на основе множеств превосходит строки. Например, даже SELECT * FROM table1 будет работать во много раз быстрее, чем то же самое с курсорами. Однако в некоторых случаях решение для курсора работает лучше. Например, вычисление запущенных агрегатов с использованием подхода на основе набора в некоторых RDMS (а именно, SQLServer 2005) включает повторное сканирование данных несколько раз, тогда как на основе курсора это делается только один раз.
Другой случай, когда вам нужно использовать курсоры, - это когда бизнес-логика вашего приложения требует, чтобы вы работали с каждой строкой по отдельности.

...