J'ai une base de données où j'utilise des TVF en ligne (fonctions de valeur de table) au lieu de vues. Par exemple, je pourrais avoir deux tables appelées [modèle de voiture] et [constructeur automobile] que je joignent à l'intérieur du TVF [fnCarBrands].
Ces TVF sont ensuite appelés par d'autres TVF pour effectuer un traitement et des rapports supplémentaires. Je pourrais donc prendre ma fonction [fnCarBrands] et rejoindre la table [Purchase Year] pour former une fonction [fnCarBrandHistory]. Et ainsi de suite pour plusieurs couches de TVF.
Je pourrais probablement obtenir la même fonctionnalité en utilisant des vues, car mes TVF en ligne ne sont en réalité que des jointures de tables et d'autres TVF.
Comment les performances des TVF en ligne écrites de cette manière se comparent-elles aux vues?
la source
Réponses:
L'optimiseur de requêtes traite une fonction de valeur de table en ligne exactement comme une vue:
Une fonction table multi-instructions est exécutée plus comme une procédure stockée. Ils doivent généralement être exécutés plusieurs fois, plutôt que d'être intégrés dans la requête principale:
la source
Vous devrez créer des vues similaires aux fonctions et interroger chacune en regardant le plan d'exécution pour voir ce qui se passe avec chacune.
la source
Bien sûr, la création de vues qui appellent d'autres vues est également une perte de performances. Ne suivez pas cette voie. Écrivez les requêtes dont vous avez besoin et n'utilisez ni TVF ni vues si vous voulez des performances. C'est la superposition qui crée le problème, c'est presque toujours une mauvaise chose à faire lors de l'interrogation d'une base de données et vous pouvez rapidement finir par atteindre la limite du nombre de tables que vous pouvez référencer aussi, d'autant plus que vous finissez souvent par référencer le mêmes tables dans différentes couches. De plus, bien que cela semble être plus facile à entretenir, ce n'est pas le cas. Essayez de déboguer ou d'ajouter une colonne en raison d'une nouvelle exigence lorsque la couche que vous devez corriger est en bas.
la source