Comment MySQL optimise-t-il une requête sur une view ?
Bonjour,
Je dispose d'une view (MyView) qui effectue une jointure sur 10 tables.
Je lance ensuite le SELECT suivant :
Code:
1 2 3
| SELECT *
FROM MyView
WHERE PersonneID = 356596 |
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é.
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.
8-)
JJE