Есть ли разница в производительности, когда вы разбиваете хранимую процедуру на несколько процедур вместо большой процедуры?
Какой из них быстрее?
Например:
mainSP
callSP1
callSP2
callSP3
end;
скорее, чем:
SP
....
....
....
Есть ли разница в производительности, когда вы разбиваете хранимую процедуру на несколько процедур вместо большой процедуры?
Какой из них быстрее?
Например:
mainSP
callSP1
callSP2
callSP3
end;
скорее, чем:
SP
....
....
....
Любое преимущество в производительности будет в очень редких случаях, например. где основной процесс вызывается много раз в цикле, и каждая отдельная итерация не занимает много времени.
Большую часть времени ремонтопригодность разбивки вашей программы на логические шаги намного перевешивает незначительный прирост производительности, который может быть получен.
Как было сказано ранее, проверяйте и тестируйте - если вы не видите значительных преимуществ, сделайте упор на ремонтопригодность - будущие разработчики будут вам благодарны!
В 10g и выше есть «оптимизирующий компилятор».
В 11g выполняется "встраивание подпрограмм . Встраивание подпрограммы заменяет вызов подпрограммы (подпрограммы в том же программном модуле) копией вызываемой подпрограммы"
Я думал, что встраивание было частью 10g, но не могу найти его там документально.
Теоретически каждый раз, когда хранимая процедура вызывается из другой хранимой процедуры, происходит небольшое снижение производительности. Однако точное влияние зависит от количества параметров и типа вызываемой хранимой процедуры.
В целом это не должно иметь значения. Но когда есть сомнения, проверьте.
это зависит от того, что происходит.
если mainSP зацикливается на callSP1, а mainSP может просто выполнять отдельные операторы для работы с набором данных, тогда это будет медленнее.
есть небольшие накладные расходы при вызове других процедур, а также небольшая проблема с возвратом сообщений об ошибках.
если вы дублируете код повсюду, сделайте общую процедуру. в противном случае держите его вместе.