T-SQL оптимизирует производительность различных хранимых процедур - PullRequest
1 голос
/ 16 августа 2010

поэтому я написал несколько хранимых процедур, которые воздействуют на отдельные строки данных, используя идентификационный номер.Я хотел бы сохранить несколько хранимых процедур, которые могут вызывать эту хранимую процедуру на разных уровнях моей схемы базы данных.Например, когда вставляется строка, я вызываю эту хранимую процедуру.Когда что-то еще изменяется, я хотел бы вызвать эту хранимую процедуру для каждой строки.Это значит, что у меня может быть один набор базового кода, который можно вызывать повсюду, но который действует на разные объемы данных.Мне удалось получить этот результат с помощью курсоров, но мне сказали, что они очень неэффективны.Есть ли другой способ создать такую ​​функциональность, не жертвуя при этом производительностью?Благодарю.

1 Ответ

1 голос
/ 16 августа 2010

Да.Используйте стандартные объединения для работы с наборами, а не с RBAR (Row By Agonizing Row).т.е. вместо вызова функции для каждой строки, спроектируйте объединение, которое выполняет требуемую операцию над каждой применимой строкой как операцию набора.

Я часто вижу, что разработчики используют «функция работает с каждой строкой», и хотяпохоже, это очевидный способ инкапсулировать логику, она не очень хорошо работает на SQL Server или на большинстве механизмов БД.

В некоторых случаях можно эффективно использовать табличную функцию (MS SQL Server).

(Кстати, вы правы, говоря, что курсоры неэффективны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...