SQL Server - отдельные процедуры против одной процедуры - PullRequest
4 голосов
/ 19 марта 2009

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

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

Запись процедуры в виде трех разных процедур может изменить работу системы, которая выполняет процедуры, но не будет иметь какого-либо существенного значения.

Что я хотел бы знать, так это то, стоит ли производительность, полученная благодаря наличию процедур, которые не имеют разных планов выполнения, в зависимости от входных данных по сравнению с одной процедурой, т. Е. Накладные расходы на вызов базы данных в три раза больше накладные расходы на необходимость перекомпиляции плана производительности в зависимости от обстоятельств?

Спасибо

Грег

Ответы [ 3 ]

2 голосов
/ 19 марта 2009

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

Там может повысить производительность, но это непредсказуемо. Иногда сложность сбивает с толку оптимизатора плана запросов. Разбивка вашего метода über на несколько более простых стратегий для конкретных случаев (подсказка для Криса) может уменьшить количество ошибок, связанных с агрессивным сокращением очень большого дерева решений, и может также разрешить для случая оптимизаций. Когда «особый» случай на самом деле очень типичен, это может быть чрезвычайно полезно.

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

2 голосов
/ 19 марта 2009

Вы можете написать три отдельные хранимые процедуры, но затем вызывать их из одного хранимого процесса.

0 голосов
/ 19 марта 2009

Если некоторые функциональные сегменты не могут быть использованы в других областях вашей системы, я бы порекомендовал придерживаться 1 хранимой процедуры.

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

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