.: Função de Usuário no Banco de Dados SQL Server
Esta é uma “dica” sobre a utilização de User Function no SQL Server, pois, em alguns casos ela poderá trazer problemas de performance.
Utilizar User Function tem grandes vantagens técnicas como todos programadores já sabem, porém, ao utilizá-la na clausula where poderá trazer a famosa “lentidão”, caso sua consulta principal retornar muitos dados.
EXEMPLO:
–Criando uma User Function
Create Function fn_pesquisa_status
(
@status varchar(20)
)
Returns int
AS
Begin
declare @cod int
select @cod = cod_status from tab_status where tipo = @status
return @cod
End
–Utilizando User Function retornou 12.359 registros
–em 2:13 (dois minutos e treze segundos)
select nm_cliente
from tab_cliente
where status = dbo.fn_pesquisa_status(’ATIVO’)
–Utilizando SubSelect retornou 12.359 registros
–em 0:00 (0 segundos)
select nm_cliente
from tab_cliente
where status = (select cod_status from tab_status where tipo = ‘ATIVO’)
Explicação
Isso ocorre porque o SQL Server irá acionar a User Function de acordo com o número de registros que existir no seu select principal, ou seja, nesse caso, a User Function foi acionada 12.359 vezes, enquanto o SubSelect foi executado apenas uma única vez.
Darci Leandro - DBA LocaWeb




29 de março de 2007 at 14:51
Excelente observação Leandro xara! hehe
Parabéns pelo blog, são muito bacanas as dicas e mostram o quanto são capacitados os profissionais dessa grande empresa.
parabéns.
att,
Leandro Ribeiro