Normalement, sélectionner un résultat d'une fonction scalaire ne fera pas beaucoup de mal, mais le filtrage cela peut facilement coûter des centaines de secondes (pas nécessairement cependant).
Si vous avez besoin de filtrer par un résultat de fonction scalaire (WHERE col = dbo.scalar_function()
), il est souvent utile de créer une fonction table en ligne à la place. Il renverrait sa valeur comme seule ligne de la table de résultats. Vous feriez alors une inner join
avec le résultat de la fonction, filtrant efficacement par la valeur renvoyée. Cela fonctionne car SQL Server est toujours capable de dérouler les fonctions table en ligne et de les incorporer dans la requête appelante.
Notez que cette astuce ne fonctionnera pas si la fonction est en plusieurs étapes. Ceux-ci ne peuvent pas être déroulés.