Question

Nous commençons tout juste à regarder passer à SQL 2008 de SQL 2000 et constatent la nouvelle CROSS APPLY et INNER POSTULER syntaxe qui permet une forme de « se joindre » contre soit paramétrées UDFs valeur table ou les sous-requêtes corrélées.

Il est évident que ce serait bien de pouvoir encapsuler la logique dans une UDF et être en mesure de le réutiliser dans différentes requêtes, mais je suis sûr que la fonctionnalité est livré avec un coût.

Je l'ai regardé autour sur le filet assez peu, mais je ne peux pas trouver des indicateurs de performance qui indiquent à quel point une performance que vous frappez prendriez lors de l'utilisation des requêtes basées sur ce que-POSTULER vous pourriez obtenir si vous inline même requête.

Je sais que l'impact exact dépendra fortement du schéma spécifique et les requêtes, mais j'étais curieux de savoir si quelqu'un a une expérience des systèmes du monde réel d'accord pour partager sur ce point.

Était-ce utile?

La solution

J'utilise APPLIQUER dans les lieux. Il est utile de forcer la ligne de traitement de ligne au lieu d'une boucle, si vous devez le faire.

Bizarrement, en un seul endroit, il ws plus efficace (lors de l'utilisation profileur vue lit) parce que le traité Optimiseur l'UDF comme une boîte noire et appliqué le filtre que je voulais.

Le udf est une fonction d'une valeur de table en ligne que lorsque élargi / non imbriquées dans une jointure était pire parce que le optmiser regardait la requête dans son ensemble et appliqué le filtre ina endroit différent.

Dans le cas contraire, je l'utilise avec parcimonie ou sur le code qui ne fonctionne pas souvent ... et vérifiez qu'il ne tue pas vraiment mauvais. J'accepte le coup pour gagner la maintenabilité.

Hors sujet: encapsulation ne va que jusqu'à présent dans les bases de données:. À un moment donné, vous perdez l'ensemble de l'avantage en fonction

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top