Pergunta

Estamos apenas começando a olhar para mover-se para SQL Server 2008 do SQL 2000 e estão observando o novo CROSS aplicar e INNER APLICAR sintaxe que permite uma forma de 'unir' contra qualquer UDFs parametrizados com valor de tabela ou subconsultas correlacionadas.

Obviamente, seria bom ser capaz de lógica encapsular em um UDF e ser capaz de reutilizá-lo em diferentes consultas, mas tenho certeza de que a funcionalidade vem com um custo.

Eu olhei ao redor na net um pouco, mas não consigo encontrar nenhum métricas de desempenho que indicam quanto de um desempenho bater-lhe levaria ao usar consultas baseadas em aplicar sobre o que você pode obter se você inlined a mesma consulta.

Eu sei que os impactos exatos dependerá fortemente o esquema e consultas específicas, mas eu estava curioso para saber se alguém tem alguma experiência de sistemas do mundo real de ajuste para compartilhar sobre isso.

Foi útil?

Solução

Eu uso APLICAR em alguns lugares. É útil para forçar linha por linha de processamento em vez de um loop, se você tem que fazê-lo.

Estranhamente, em um lugar ws mais eficaz (quando se utiliza perfilador de vista lê) porque o optimiser tratada a UDF como uma caixa preta e aplicado o filtro como queria.

O UDF é uma função com valor tabela embutida que quando expandido / não aninhado em uma join foi pior porque o optmiser olhou para a consulta como um todo e aplicado o filtro ina lugar diferente.

Caso contrário, eu usá-lo com moderação ou em código que não executa muitas vezes ... e verificar que ele não mata muito ruim. Aceito o hit para manutenção ganho.

Off topic: encapsulamento só vai tão longe nas bases de dados:., Em algum momento você perder o set vantagem com base

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top