[SQL] Interet des vues (& performances)

Interet des vues (& performances) [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-11-2004 à 10:29:59    

Je voulais savoir exactement ce qu'etait l'interet des vues a part simplifier un  schema relationnel?
a priori une requete faisant appel à une vue, va relancer la creation de la vue  non? (si ya des lignes qui ont ete rajoutées depuis le dernier appel);
donc je capte pas trop l'interet en fait :/
merci d'eclairer ma lanterne :)


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 18-11-2004 à 10:29:59   

Reply

Marsh Posté le 18-11-2004 à 16:33:15    

Tu économises toute la phase d'interprétation de la requête et son optimisation. Soit 90% du temps pour la plupart des requêtes.
 
Fais des tests, tu verras c'est incomparable.

Reply

Marsh Posté le 18-11-2004 à 16:45:57    

Reply

Marsh Posté le 18-11-2004 à 18:10:21    

une vue c'est juste une requête que tu stoque ... ça ne contient pas de lignes 'insérées' comme tu le penses.
 
Ca permet une simplification d'écriture ... et ça a ses propres propriétés (READ ONLY, etc.).
Mais en interne, quand tu accèdes à une vue, c'est comme si tu faisais un copier coller de sa définition dans ta requête.

Reply

Marsh Posté le 18-11-2004 à 18:15:50    

ouais jme suis mal exprimé, mais je voulais dire que deux appels successif a une vue peuvent retourner des resultats differents (si les tables qui sont utilisées ds la vue ont changé...)
Mais bon, vu que je bosse uniquement sur de l'optimisation, si la requete de la vue est deja analysée ca me va :D


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 18-11-2004 à 18:25:48    

yo suri morkitu [:dawa]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-11-2004 à 18:37:07    

Reply

Marsh Posté le 18-11-2004 à 20:02:49    

Beegee a écrit :

une vue c'est juste une requête que tu stoque ... ça ne contient pas de lignes 'insérées' comme tu le penses.
 
Ca permet une simplification d'écriture ... et ça a ses propres propriétés (READ ONLY, etc.).
Mais en interne, quand tu accèdes à une vue, c'est comme si tu faisais un copier coller de sa définition dans ta requête.


Pas du tout, comme j'ai dit, il y a toute la phase de d'interprétation/optimisation qui saute quand tu utilises une vue.
 
Alors quand tu tapes dans 12 tables contenant chacunes 20 indexes, ben tu sens carrément la différence.
 
Evidement, si c'est pour faire un select sur une unique table avec un filtre qui n'utilise pas d'index, ça ne sert rigoureusement à rien (ou presque)

Reply

Marsh Posté le 19-11-2004 à 08:55:17    

Tu veux dire que la vue a en gros son explain plan 'intégré' ?

Reply

Marsh Posté le 19-11-2004 à 10:01:37    

Oui, elle est "compilée". Donc il n'y a qu'un code binaire à exécuter textuellement, sans ce soucier de sa complexité.
 
Pour une requête qui tape dans de bons index, ça revient au même que faire un simple "select * from table" niveau performances.

Reply

Marsh Posté le 19-11-2004 à 10:01:37   

Reply

Marsh Posté le 19-11-2004 à 10:35:44    

Donc en gros, si tu crées une vue sur une table, qu'ensuite tu rajoutes un index à la table, hé ben la vue ne pourra jamais profiter de cet index ? (à moins de la recréer bien sûr)

Reply

Marsh Posté le 19-11-2004 à 10:52:24    

Là, c'est une question à laquelle je ne saurais répondre.
 
A mon avis, c'est transparent, parceque la vue est liée à la table, et l'index est lié à la table aussi. Donc toute modification d'un élément entraîne un check des autres : la vue devrait être recompilée en même temps que la création de l'index.
 
On a la même chose avec les procédures stockées, qui sont elles aussi compilée, le code comme les requêtes.
 
Dans un SGBD tout pourri, il faut peut-être tout regénérer à chaque fois, mais sur une base comme Oracle, je suis certain à 99% que c'est automatique.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed