Я читал, что курсоры довольно slow, и нужно, если только из вариантов не избегать их. Я пытаюсь оптимизировать свои хранимые процедуры, и один из них использует курсор. Он часто вызывается моим приложением и множеством пользователей (20000) и строк для обновления. Я думал, может быть, я должен использовать что-то другое в качестве альтернативы.Насколько медленны курсоры и какие альтернативы лучше?
Все, что я пытаюсь сделать или хочу, это получить список записей, а затем работать в зависимости от каждого значения строки. Так например у нас говорят -
Employee - Id,Name,BenefitId,StartDate,EndDate
Так на основе benefitId мне нужно сделать различные вычисления, используя даты между StartDate и EndDate и обновления деталей работника. Я просто делаю этот надуманный пример, чтобы дать представление о моей ситуации.
Что вы думаете об этом? Существуют ли лучшие альтернативы курсорам, например, используя временные таблицы или пользовательские функции? Когда вы действительно выбираете их или не должны использовать курсоры? Спасибо всем за помощь.
Многие места требуют, чтобы вся база данных проходила через хранимые процедуры. И лучше всего выполнять сложную обработку в сохраненном proc, который может настроить производительность dba, чем помещать подобные вещи в приложение. Более того, почти все курсоры, запускаемые из приложения, могут быть легко заменены логикой на основе набора. Курсоры редко нужны, за исключением некоторых административных задач, связанных с dba.Если вы вставляете, обновляете или удаляете одну или несколько таблиц, вы можете сделать это на основе набора, почти до 100% времени. – HLGEM 2010-11-22 23:20:17