Bonjour à tous,
Voilà, à mon boulot, on fait des rapports Excel pour nos clients sur le schéma suivant :
Un exécutable lance une requête sur une base de données Oracle.
Il ouvre Excel et colle les données dans une page.
Excel (ou le l’exécutable) fait des macros pour arranger l’affichage.
ça fonctionne plutôt bien sauf que dernièrement, on nous a demandé des rapports qui prennent beaucoup de données et qui donc mettent beaucoup de temps à sortir. On voudrait donc optimiser nos requêtes et on est tombé sur les vues, puis les vues matérialisées.
Basiquement, j’ai compris que les vues sont des requêtes un peu costaud qu’on peut appeler dans des requêtes, comme des sous-requêtes en fait. Donc niveau performances, ça ne change rien, il exécute quand même la requête.
Par contre, les vus matérialisées (ou Materializes view, ou Snapshot) font une sorte de “table”, apparemment rafraichie périodiquement (fréquence paramétrable), et donc on optimise pas mal le temps de traitement puisqu’on va chercher nos infos dans une “table”, mais on ignore un peu les impacts d’un tel objet dans la base. Quelqu’un a-t-il déjà expérimenté des vues matérialisées ?
Merci.
Je n’ai qu’une connaissance théorique de la chose, et notre dba oracle est en vacances ^^
Ceci dit, le principe des vues en général, et de “précompiler” une requête un peu lourde, et donc, interroger la vue directement évitera une grande partie du traitement.
Au niveau impact, si ma mémoire est bonne, c’est que ça peut être assez gourmand en mémoire à terme, mais niveau performance, ça poutre grave sa maman.
Niveau utilisation, normalement tu peux faire tout ton crud depuis la vue, c’est fait pour.
Bon évidemment, tout ceci mérite confirmation de là part d’un connaisseur en Oracle, étant donné que chaque sgbd a ses petites particularités.
Tout dépend comment tu définis ta vue et quelle en est ton utilisation. Dans pas mal de cas, ça n’améliorera pas du tout ta requête.
Pour ce qui est des MV, ça te fera en effet gagner pas mal de temps. Au niveau de l’impact sur la base de données, ben ça prendra plus de place, forcément et si la requête que tu utilises pour construire ta vue est complexe, peut-être que tu devras éviter de la raffraichir pendant les heures de production…