Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Одна длинная SP или много маленьких  [new]
Laplas
Member

Откуда:
Сообщений: 68
Уважаемый All!
Что лучше с точки зрения производительности?
Несколько длинных процедур с перекрывающимися частями( то есть
copy-paste ) или структурный подход, где общие части вынесены в отдельные процедуры. Другими словами какова цена вызова процедуры из процедуры?
17 июл 03, 18:41    [266427]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
У меня была тоже идея фикс, засунуть всё в одну процедуру, но опыт показал, что понимание функционирования отпадает напрочь.
Вспоминаю старый программерский девиз: Если код программы не цмещается на экран - пиши процедуру.
А с производительностью, чёрт с ней, тебя эти миллисекунды не спасут.
17 июл 03, 19:08    [266439]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
Laplas
Member

Откуда:
Сообщений: 68
Вот точно моя мысль.
Поэтому система и была сделана так.
Но теперь как раз речь о милисекундах....
17 июл 03, 19:20    [266449]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Однозначно несколько небольших процедур. Вопрос в том, как именно порезать код на части (оптимально).

Большие процедуры плохи для оптимизатора, плохо читаются, плохо поддерживать. Кроме того, если не получается организовать код в виде небольших процедур (вызывающих друг друга если надо), то стОит подумать о правильности дизайна БД.
17 июл 03, 19:26    [266452]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
неважно кто
Guest
На первый взгляд больших отличий по производительности нет:

if object_id('p1')>0 drop procedure p1

if object_id('p2')>0 drop procedure p2
if object_id('p3')>0 drop procedure p3
if object_id('p4')>0 drop procedure p4
GO
create procedure p1 as
declare @c int
select @c=count(*) from syscolumns
GO
create procedure p2 as
declare @c int
select @c=count(*) from sysobjects
exec p1
GO
create procedure p3 as
declare @c int
select @c=count(*) from syscomments
exec p2
GO
create procedure p4 as
declare @c int
select @c=count(*) from syscomments
select @c=count(*) from sysobjects
select @c=count(*) from syscolumns
GO


set nocount on

declare @i int,@d datetime

set @i=1
select @d=getdate()
while @i<1000 begin
exec p3
set @i=@i+1
end
select datediff(ms,@d,getdate())


set @i=1
select @d=getdate()
while @i<1000 begin
exec p4
set @i=@i+1
end
select datediff(ms,@d,getdate())
17 июл 03, 19:47    [266467]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
Laplas
Member

Откуда:
Сообщений: 68
Предположим есть следующее
A вызывает B вызывает C
Если процедура B должна быть перекомпилирована,
будет ли перекомпилирована A?
По идее вроде не должна, так?
17 июл 03, 19:54    [266474]     Ответить | Цитировать Сообщить модератору
 Re: Одна длинная SP или много маленьких  [new]
TUnknown
Guest
//какова цена вызова процедуры из процедуры?

существует ли 100% уверенность, что кроме этого нечего оптимизировать?
18 июл 03, 09:42    [266761]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить