Я пытаюсь оптимизировать хранимую процедуру, которую я поддерживаю, и мне интересно, может ли кто-нибудь рассказать мне о преимуществах/штрафах производительности для приведенных ниже параметров. Для моего решения мне в основном нужно запустить программу преобразования изображения, хранящегося в столбце IMAGE в таблице. Процесс преобразования находится во внешнем файле .EXE. Вот мои варианты:
Извлеките результаты целевой таблицы во временную таблицу, а затем используйте курсор, чтобы пройтись по каждой строке в таблице и запустить хранимую процедуру для столбца IMAGE. Сохраненный процесс обращается к .EXE.
Создайте пользовательскую функцию, которая вызывает файл .EXE, и выполните запрос SQL, аналогичный «выберите UDFNAME (Image_Col) из TargetTable».
Я думаю, что я ищу, это представление о том, сколько накладных расходов будет добавлено созданием курсора, вместо того, чтобы делать это как набор?
Некоторая дополнительная информация:
- Размер набора в этом случае макс. 1000
- Как упоминается в ответе ниже, если это делается как набор с UDF, будет ли это означать, что внешняя программа открывается 1000 раз одновременно? Или есть оптимизации для этого? Очевидно, что в многопроцессорной системе может быть неплохо иметь несколько запущенных экземпляров процесса, но 1000 может быть многовато.