web-dev-qa-db-fra.com

Que faut-il utiliser? Voir ou table temporaire

J'ai un problème pour décider d'utiliser une vue ou une table temporaire.

J'ai une procédure stockée que j'appelle à partir du programme. Dans ce SP je stocke le résultat d'une longue requête dans une table temporaire, nommez les colonnes et faites une autre requête sur cette table stockez les résultats dans des étiquettes ou une grille ou autre et déposez la table temporaire . Je pourrais également stocker le résultat de la requête dans une vue et faire des requêtes sur cette vue. Alors, quoi de mieux ou dans quel cas dois-je utiliser une table VIEW/Temp.

Selon mes recherches, une vue présente les avantages suivants: sécurité, simplicité et spécification du nom de colonne. Ma table temporaire remplit tout cela aussi (selon mon avis).

41
ruedi

Si la requête est "longue" et que vous accédez aux résultats de plusieurs requêtes, une table temporaire est le meilleur choix.

Une vue, en général, n'est qu'un raccourci pour une instruction select. Cela n'implique pas que les résultats soient jamais exécutés et traités. Si vous utilisez une vue, les résultats devront être régénérés à chaque utilisation. Bien que les exécutions suivantes de la vue puissent être plus efficaces (par exemple parce que les pages utilisées par la requête de vue sont en cache), une table temporaire stocke en fait les résultats.

Dans SQL Server, vous pouvez également utiliser des variables de table (declare @t table . . .).

L'utilisation d'une table temporaire (ou d'une variable de table) au sein d'une même procédure stockée semble avoir peu d'implications en termes de sécurité, de simplicité et de noms de colonnes. La sécurité serait gérée par l'accès à la procédure stockée. Les noms de colonne sont nécessaires pour l'une ou l'autre solution. La simplicité est difficile à juger sans plus d'informations, mais rien ne semble particulièrement compliqué.

42
Gordon Linoff

dépend

Une vue doit répliquer le traitement de votre "requête longue" à chaque exécution, tandis qu'une table temporaire stocke les résultats.

voulez-vous donc utiliser plus de traitement ou plus de stockage?

Vous pouvez stocker certaines valeurs de vue (index persistant) qui pourraient aider au traitement, mais vous ne fournissez pas suffisamment d'informations pour vraiment l'explorer.

Si vous parlez de simplement stocker les données à utiliser dans un seul appel de procédure, alors une table temporaire est la solution.

9
KM.

Il s'agit vraiment d'une question et d'une réponse spécifiques à la situation et à l'opération qui peuvent varier en fonction des exigences du scénario. Cependant, un petit point que je voudrais ajouter est que si vous utilisez une vue pour stocker les résultats d'une requête complexe, qui sont à leur tour utilisés dans les opérations d'une GridView, il peut être difficile d'effectuer des opérations de mise à jour sur des vues complexes . Au contraire, les tables temporaires peuvent parfaitement suffire.

Encore une fois, il existe des scénarios où les vues peuvent être un meilleur choix [comme dans plusieurs serveurs de bases de données si elles ne sont pas gérées correctement] mais cela dépend de ce que vous voulez faire.

3
Jayant Shelke

Je voudrais également mentionner que pour la table temporaire,

Vous ne pouvez pas faire référence à une table TEMPORAIRE plusieurs fois dans la même requête.

Cela rend la table temporaire peu pratique pour les cas où vous souhaitez utiliser l'auto-jointure dessus.

1
Moyuan Huang

En général, j'utilise une table temporaire lorsque je souhaite faire référence plusieurs fois à la même table dans une procédure stockée, et une vue lorsque je souhaite utiliser la table sur différentes procédures stockées.

Une vue ne conserve pas les données (en principe): chaque fois que vous référencez la vue, SQL utilise la logique de la vue pour accéder à la table d'origine. Vous ne voudriez donc pas construire une vue sur une vue sur une vue, ou utiliser plusieurs références à une vue qui a une logique complexe.

0
user11857493