Je me demande comment optimiser une requête avec plusieurs tables père/fils utilisant 2 critères de recherche, l'un sur la table père et l'autre critère sur la dernière table fils.
Exemple:
soit les tables Ecole, Classe, Eleve, Note.
Une Ecole a plusieurs Classes, une Classe plusieurs Eleves, un Eleve plusieurs Notes et la table Note une colonne date_controle.
Comment optimiser une requête qui recherche toutes les notes avec les critères Ecole.id=? et Note.date_controle > ?
Avec les clés primaires, on a (1 école * nb classes * nb élèves * nb notes) puis un filtre pour date_controle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT n.id, n.date_controle, n.note, n.id_eleve FROM Note n JOIN Eleve e ON e.id=n.id_eleve JOIN Classe c ON c.id=e.id_classe JOIN Ecole ec ON ec.id=c.id_ecole WHERE ec.id=? AND n.date_controle > ?
Avec un index sur date_controle, on a (les notes qui respectent la contrainte de date de TOUTES les écoles) puis un filtre sur l'école.
Comment faire mieux ?
merci.
Partager