2009-03-19 3 views
4

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

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

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

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

Благодаря

Грег

ответ

2

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

+0

За дополнительные бонусные баллы, что такое НАЗВАНИЕ этого шаблона дизайна? –

+0

ха-ха, я мусор, вспоминая эти имена. Я действительно понимаю фабричные шаблоны и принципы SOLID, но, хотя концепция остается со мной, имя обычно должно быть вызвано поиском google –

+0

для целей чистого чистого переполнения стека, вы должны, вероятно, отредактировать свой собственный ответ, чтобы выявить этот неуловимый шаблон name –

0

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

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

+0

Ни один из функциональных сегментов не используется повторно, что помогает ответить на мой вопрос. Однако процедуры будут повторяться для разных объектов в моей системе, но нет обобщения, которые могут быть применены к подпрограммам. – TheMouster

+0

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

2

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

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

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

Смежные вопросы