Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Différence entre une fonction en ligne et une vue

Après avoir lu de nombreuses réponses ici, j'aimerais noter qu'il existe une grande différence entre une fonction table en ligne et tout autre type de fonction (TVF scalaire ou multiligne).

Un TVF en ligne est simplement une vue paramétrée. Il peut être étendu et optimisé comme une vue. Il n'est pas nécessaire de matérialiser quoi que ce soit avant de "retourner des résultats" ou quelque chose comme ça (bien que, malheureusement, la syntaxe ait un RETURN .

Un grand avantage que j'ai trouvé d'un TVF en ligne par rapport à une vue est qu'il force le paramétrage requis alors qu'avec une vue, vous devez supposer que l'appelant rejoindra ou limitera l'utilisation de la vue de manière appropriée.

Par exemple, nous avons de nombreuses grandes tables de faits dans DW avec un modèle en étoile typique de Kimball. J'ai une vue sur un modèle centré sur une table de faits, qui, appelé sans aucune restriction, renverra des centaines de millions de lignes. En utilisant un TVF en ligne avec un paramétrage approprié, les utilisateurs ne peuvent pas demander accidentellement toutes les lignes. Les performances sont largement indiscernables entre les deux.