2017-04-21 1 views
2

J'ai essayé de chercher de différentes manières, mais je n'ai pas trouvé de réponse claire à ma question. This question presque répond à ma requête, mais pas tout à fait.Avantages des vues dans les procédures stockées

Outre les différences évidentes de lisibilité, ce qu'il ya des avantages à utiliser une vue dans une procédure stockée:

SELECT 
    * 
FROM 
    view1 
WHERE 
    view1.fdate > @start AND 
    view1.fdate <= @end 

... sur l'aide d'une liste de tables liées ...

SELECT 
    * 
FROM 
    table1 
    INNER JOIN 
    table2 
     ON table1.pid = table2.fid 
    INNER JOIN 
    table3 
     ON table1.pid = table3.fid 
WHERE 
    table1.fdate > @start AND 
    table1.fdate <= @end 

. ..dans une déclaration préalable ou une procédure stockée?

+1

Eh bien, certaines vues peuvent être indexées, donc dans certains cas, les vues indexées peuvent aider les performances. Autre alors que je doute s'il y a une vraie différence. Cependant, je suppose que les experts de DBA peuvent probablement trouver de meilleures réponses, alors je vais laisser cela comme un commentaire. –

+0

Merci pour votre contribution, @ZoharPeled. J'ai noté cela, mais les index de niveau de table ne seraient-ils pas aussi utiles (si la table est indexée correctement en premier lieu)? – Paul

+1

Les vues indexées @Paul peuvent créer des index qui ne peuvent pas être mis en correspondance avec les index de table, par exemple. une vue indexée peut contenir des agrégats. –

Répondre

2

Tout n'est pas au sujet de votre application et de vous. Pensez aux bases de données d'entreprise, avec des dizaines d'applications différentes accédant aux mêmes données, et des centaines de personnes interrogeant les données à des fins professionnelles. Comment expliquez-vous à chacune des nombreuses personnes comment recomposer vos données hautement normalisées? Quel champ de recherche correspond à quelle table? Comment sont-ils joints? Et comment accorder un accès en lecture seule aux données, en veillant à ce que certains champs sensibles ne soient pas accessibles, sans vous répéter?

Vous, le DBA, créez des VIEW. Ils dénormalisent les données dans des relations faciles à traiter pour les gens d'affaires, pour les nombreuses applications et pour les rapports. Vous accordez une autorisation select sur les vues sans accorder l'accès à la table sous-jacente pour masquer les champs privés sensibles. Et parfois vous écrivez des vues parce que vous êtes fatigué d'être appelé à minuit parce que la base de données est 'down' parce que Johnny de la comptabilité exécute une jointure cartésienne.

+1

Ce Johnny n'est rien mais truble ... :-) –

+0

Honnêtement je n'y ai pas pensé (je suis un développeur égoïste, après tout, pas un vrai DBA!). C'est une information utile - merci. – Paul

0

Il n'y a pas de différence. Les plans de requête seront identiques dans les deux cas. L'optimiseur de requêtes peut utiliser la vue indexée même si vous ne l'utilisez pas explicitement (dans le cas 2)