Bonjour.
J'ai une question technique sur l'utilisation des vues par le SGBD. Si la réponse dépend du SGBD, prendre en compte le fait que j'utilise MySQL.
Je suis en train de créer des vues sur une nouvelle BDD en cours de création et je me demande si le SGBD peut prendre l'initiative de simplifier la vue selon l'interrogation qui est faite dessus ou s'il va systématiquement exécuter toute la vue à chaque fois qu'elle sera utilisée.
Voici une vue un peu peu complexe qui va donner un paquet d'informations sur les étudiants inscrits à un stage :
Mais l'application peut avoir besoin d'informations partielles sur l'étudiant, par exemple avant qu'il soit inscrit à un stage, ce qui fait que des jointures seraient inutiles dans la vue. Ainsi, si je fais ensuite la requête ci-dessous, les jointures externes sont inutiles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 CREATE VIEW stamas.v_etudiant AS SELECT e.etu_id_utilisateur AS id_etudiant, u.uti_login AS login_etudiant, u.uti_mot_passe AS mot_passe_etudiant, p.prs_nom AS nom_etudiant, p.prs_prenom AS prenom_etudiant, p.prs_adrel AS adrel_etudiant, p.prs_telephone AS tel_etudiant, e.etu_adresse AS adresse_etudiant, e.etu_id_concours AS id_concours_etudiant, c.ccr_libelle AS libelle_concours, e.etu_id_etablissement_origine AS id_etab_orig_etudiant, e1.etb_nom AS nom_etablissement_origine, s.stg_id AS id_stage, s.stg_id_etablissement AS id_etablissement_stage, e2.etb_nom AS nom_etablissement_stage, s.stg_date_debut AS date_debut_stage, s.stg_date_fin AS date_fin_stage FROM t_etudiant_etu AS e INNER JOIN t_utilisateur_uti AS u ON u.uti_id_personne = e.etu_id_utilisteur INNER JOIN t_personne_prs AS p.prs_id = u.uti_id_personne INNER JOIN t_concours_ccr AS c ON c.ccr_id = e.etu_id_concours INNER JOIN t_etablissement_etb AS e1 ON e1.etb_id = e.etu_id_etablissement_origine LEFT OUTER JOIN t_etu_inscrire_stg_eis AS i ON i.eis_id_etudiant = e.etu_id_utilisteur LEFT OUTER JOIN t_stage_stg AS s ON s.stg_id = i.eis_id_stage LEFT OUTER JOIN t_etablissement_etb AS e2 ON e2.etb_id = s.stg_id_etablissement
Vaut-il mieux dans ce cas créer une vue plus simple ou le SGBD est-il capable de détecter que des jointures de la vue sont inutiles et ainsi simplifier le script de la vue ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT id_etudiant, login_etudiant, nom_etudiant, prenom_etudiant, libelle_concours, nom_etablissement_origine FROM v_etudiant
Comme je n'ai pas encore de données dans la BDD, je ne peux pas tester en réel mais un EXPLAIN de la requête dans MySQL semble considérer tous les index de toutes les tables.
Partager