Funo Escalar x Table Valued Function

Muito se fala na internet sobre como as funes escalares so terrveis e que devemos evitar o uso a todo o custo… Eu gostaria de mostrar o porqu:

Vejam o seguinte script abaixo (um procedimento muito utilizado por a: a utilizao de uma funo escalar que trata N casos e retorna o valor desejado). Primeiro, a criao da tabela e insero dos dados:

 

Ao executar uma consulta para retornar as notas fiscais no perodo de um ms utilizando a funo escalar, temos o seguinte resultado:

2 segundos para 320 registrosPouco, voc pode imaginar Mas pense que isto para uma funo, sem nenhuma regra absurda (apenas um case simples e direto) e na minha mquina, onde somente a minha conexo est aberta. Imaginem isso em um servidor com uma alta carga e concorrncia.

Se substituirmos essa funo por uma funo que retorne uma tabela, teremos o seguinte resultado:

Notaram a diferena? Conseguimos reduzir a consulta de2 segundos para 2 milissegundos, um ganho realmente considervel.

O que eu quero dizer aqui: Sempre que possvel, evitem o uso de funes escalares. Vejam se uma TVP pode ser utilizada e, caso contrrio, avaliem tratar o dado na aplicao e no no banco, pois o ganho de desempenho pode ser realmente significativo.

Se tiverem algo a agregar e/ou corrigir, por favor, faa… A ideia aqui passar a informao da melhor forma e mais correta possvel.

PS: A tabela Numbers que eu utilizei para a criao dos dados a verso do Adam Machanic, que pode ser encontrada aqui:http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/you-require-a-numbers-table.aspx

[]s!

3 comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.