IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comment MySQL optimise-t-il une requête sur une view ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.



    JJE

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Le plus sûr moyen de le savoir serait de tester avec EXPLAIN, non ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Par défaut
    Oui effectivement, je viens de découvrir la commande EXPLAIN.
    Elle répond en partie à ma question.

    Merci.

    JJE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [Toutes versions] Faire en VBA une requête sur une requête paramétrée
    Par guidav dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/02/2012, 17h10
  4. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  5. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo