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 :

Quel requête faut-il choisir ?


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut Quel requête faut-il choisir ?
    Bonjour,

    je ne sais pas s'il vaut mieux choisir tel ou tel requête, c'est pour cela que je viens demander conseil ici.

    Voici les deux requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.id, t1.info
    FROM table1 t1
    INNER JOIN table2  t2 ON t1.id = t2.id1
    OR t1.id = t2.id2
    OR t1.id = t2.id3
    OR t1.id = t2.id4
    WHERE t2.id_p =1
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.id, t1.info
    FROM table1 t1
    INNER JOIN table2 t2
    ON z_i.id IN (t2.id1,t2.id2,zt2.id3,t2.id4) WHERE t2.id_p =1
    Les deux tables retourne le même résultat.
    Seul changement est la condition, soit IN, soit plusieurs OR.
    J'aimerais savoir laquel il faut prendre ?
    (question optimisation, rapidité, etc...)

    Où représente t-elle chacune un avantage différent ?
    Si oui lesquels ?

    Merci de votre aide.

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    Peut-être que la deuxième est plus rapide à évaluer mais honnêtement je ne pense pas qu'il y ait une grande différence.

    Pour t'en assurer il y a l'outil BENCHMARK() (à utiliser toutes conditions égales par ailleurs).

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    Citation Envoyé par Maximilian
    Salut,

    Peut-être que la deuxième est plus rapide à évaluer mais honnêtement je ne pense pas qu'il y ait une grande différence.

    Pour t'en assurer il y a l'outil BENCHMARK() (à utiliser toutes conditions égales par ailleurs).
    J'ai pas compris ce que tu voulais dire par: à utiliser toutes conditions égales par ailleurs
    Niveau rapidité donc sans doute pas de différence, mais niveau "syntaxe", faut-il préférer une solution plutôt qu'une autre ?

    Merci à toi.

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par Thierry8
    J'ai pas compris ce que tu voulais dire par: à utiliser toutes conditions égales par ailleurs
    Simplement qu'il ne faut pas qu'il y ait de différences au niveau du contexte système (et réseau si c'est une base distante) entre le moment où tu fais une mesure sur la première requête et sur la deuxième.

    Citation Envoyé par Thierry8
    Niveau rapidité donc sans doute pas de différence, mais niveau "syntaxe", faut-il préférer une solution plutôt qu'une autre ?
    Non, toutes les deux sont standard SQL et autant compréhensibles à mon avis.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    OK

    Merci pour tout !

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    De rien

    PS : au vu de ces colonnes id1, id2, id3 et id4, ta table ne semble pas en première forme normale. Je me trompe ?

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    Je suis désolé, mais je ne suis pas très calé en anglais (je sais...).

    Que veux tu dire par "première forme normale" ?

  8. #8
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Un exemple sera plus parlant.

    Une table pas en 1è FN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Livre (id_livre, auteur1, auteur2, auteur3, auteur4, titre)
    La même chose en normalisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Livre (id_livre, titre)
    Auteur (id_auteur, nom)
    Livre_auteur (id_livre, id_auteur)
    J'ai l'impression que ta table est similaire à la première. Ca prend plus de place , c'est moins performant et pas très pratique lorsque tu veux rajouter un nouvel id (obligé de créer une colonne id5, id6...)

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    C'est ce que je pensais avoir compris, mais n'était pas certain.

    Oui en effet il y a ces deux possibilités.
    J'y avait songé, mais après m'avoir dis cela, je pense que je vais opter pour la solution dictée. Cependant je ne pensais tout de même pas que cela était aussi influencable concernant la performance.

    Concernant le poids, en effet si par exemple tout les id ne sont pas nécessaires, il y a des champs inutiles. Dans mon cas ces champs était toujours renseignés. En revanche pour rendre un peu plus modulable la table il vaut mieux en effet opter pour la solution de table de jointure.

    Merci beaucoup.

  10. #10
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par Thierry8
    J'y avait songé, mais après m'avoir dis cela, je pense que je vais opter pour la solution dictée. Cependant je ne pensais tout de même pas que cela était aussi influencable concernant la performance.
    Refais la requête du début avec la version normalisée et tu verras que c'est beaucoup plus simple (pas de OR...)

    Autre exemple : sélectionner tous les auteurs distincts. Avec la table auteurs c'est rapide mais dans la version non normalisée c'est déjà plus dur...

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    Citation Envoyé par Maximilian
    Autre exemple : sélectionner tous les auteurs distincts. Avec la table auteurs c'est rapide mais dans la version non normalisée c'est déjà plus dur...
    Effectivement !

    Ralala...
    Je m'en vais corriger tout ça !

    Merci encore à toi Maximilian.

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

Discussions similaires

  1. [Outil] Quel Gestionnaire de bugs choisir pour les projets ?
    Par MLK jr dans le forum Langages de programmation
    Réponses: 21
    Dernier message: 06/06/2006, 15h39
  2. [Info]Quel base de données choisir
    Par bartmarley dans le forum JDBC
    Réponses: 6
    Dernier message: 19/01/2005, 12h42
  3. Quel gestionnaire de version choisir ?
    Par hugo123 dans le forum SCM
    Réponses: 1
    Dernier message: 28/12/2004, 21h41
  4. Quel type de projet choisir pour incorporer directX9...
    Par Coderm@n dans le forum DirectX
    Réponses: 6
    Dernier message: 02/08/2004, 13h24

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