Bonjour,
Je dispose d'une view (MyView) qui effectue une jointure sur 10 tables.
Je lance ensuite le SELECT suivant :
Normalement, si PersonneID n'est pas une Primary Key, MySQL n'a d'autre alternative que d'examiner séquentiellement tous les enregistrements de la view pour trouver l'enregistrement souhaité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM MyView WHERE PersonneID = 356596
En admettant que PersonneID soit la Primary Key de la table principale de la view :
1) MySQL le sait-il ? Si oui comment le sait-il ?
2) MySQL utilise-t-il le statut spécifique du champs PersonneID (Primary Key) pour faire un accès direct sur l'enregistrement souhaité ?
Ma crainte est donc que MySQL, suite à l'analyse syntaxique de la view, ramène d'abord tous les enregistrements de la view dans une première passe, puis filtre ensuite le résultat sur la clause WHERE (un peu à la manière d'une clause HAVING).
Ce que j'espère, c'est que MySQL, dans son analyse syntaxique, arrive à déterminer que PersonneID est une Primary Key et qu'il utilise le statut spécifique de ce champs pour faire, dans une première passe, un accès direct à l'enregistrement souhaité. Puis, dans une seconde passe, effectue les jointures sur cet enregistrement unique.
Votre avis ?
Merci.
JJE
Partager