Хорошо ли использовать цикл while вместо курсора? Каковы преимущества/недостатки курсоров?
Курсор verus while loop - каковы преимущества/недостатки курсоров?
Ответ 1
Некоторые из них зависят от СУБД, но обычно:
Плюсы:
-
Превышение циклов при обработке строк за строкой
-
Хорошо работает с большими наборами данных
Минусы:
-
Не масштабируйте также
-
Используйте больше ресурсов сервера
-
Увеличивает нагрузку на tempdb
-
Может быть причиной утечек при неправильном использовании (например, Открыть без соответствующего закрытия)
Ответ 2
Я следую этому совету:
[...], что лучше: курсоры или WHILE петли? Опять же, это действительно зависит по вашей ситуации. Я почти всегда использую курсор для записи записей, когда необходимо. Формат курсора немного более интуитивно понятный для меня и, так как я просто использую конструкции для цикл через результирующий набор один раз, он имеет смысл использовать FAST_FORWARD курсор. Помните, что тип курсор, который вы используете, будет иметь огромное влияние о производительности вашего цикла построить.
— Тим Чепмен в Сравнение производительности курсора и WHILE в SQL Server 2008
Связанная статья содержит простые примеры того, как реализовать каждый подход.
Ответ 3
Я бы спросил, что вы делаете с этим циклом курсора /while.
Если вы обновляете или возвращаете данные, почему бы вам не использовать надлежащее предложение WHERE. Я знаю людей, которые сказали бы, что никогда не должны использовать курсоры.
Ответ 4
Некоторые недостатки курсоров здесь
Тогда есть также this (На самом деле очень интересная проблема называется "Проблема Хэллоуина" )