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 :

une requête INNER JOIN est-elle toujours plus performante qu'un produit cartesien ?


Sujet :

Requêtes MySQL

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut une requête INNER JOIN est-elle toujours plus performante qu'un produit cartesien ?
    Bonjour,

    j'ai toujours utilisé des produits cartesiens pour faire mes jointures.
    Là je suis face à un gros problème de ralentissement/performance dans un jeu de bcp de données et je me demande en utilisant des INNER JOIN je n'y gagnerai pas en vitesse...

    qu'en pensez-vous ?

    est-ce qu'une INNER JOIN va toujours plus vite qu'un produit cartésien sous mysql ?

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut,
    Produit cartésien pour moi ça veut dire pas de jointure entre 2 tables.
    A mon avis tu veux plutôt parler de jointures non normalisées, non ?
    Je pense pas que la syntaxe normalisée ou non est vraiment une influence sur les perfs.
    A mon avis vérifie d'abord tes indexes et fait des explain sur les requêtes problématiques.

  3. #3
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Bonjour,

    Citation Envoyé par skuatamad Voir le message
    Produit cartésien pour moi ça veut dire pas de jointure entre 2 tables.
    On peut tout à fait utiliser le produit cartésien pour effectuer une jointure.
    Citation Envoyé par skuatamad Voir le message
    A mon avis tu veux plutôt parler de jointures non normalisées, non ?
    Les jointures non normalisées ne sont qu'une selection sur un produit cartésien.
    Citation Envoyé par skuatamad Voir le message
    Je pense pas que la syntaxe normalisée ou non est vraiment une influence sur les perfs.
    J'ai entendus dire que certains SGBD faisaient des optimisation lors du JOIN, mais la normalisation est principalement utile en terme de portabilité et de lisibilité.
    Citation Envoyé par skuatamad Voir le message
    A mon avis vérifie d'abord tes indexes et fait des explain sur les requêtes problématiques.
    Il y a en effet toutes les chances que cela vienne de ça.

    @USA Mike : Peut-tu nous montrer ton script de création et la requête éxécuté ?
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut kazou
    Citation Envoyé par kazou Voir le message
    On peut tout à fait utiliser le produit cartésien pour effectuer une jointure.
    ...
    Les jointures non normalisées ne sont qu'une selection sur un produit cartésien.
    ...
    Je suis un peu surpris par ce que tu dis car pour moi dans ce cas c'est plus du produit cartésien mais à mon avis c'est juste un problème de terminologie.

    Pour moi il n'y a produit cartésien que dans le cas sans jointure comme :
    D'ailleurs sqlpro dit ici :
    Rappelons que le produit cartésien de deux ensembles n'est autre que la multiplication généralisée. Dans le cas des tables, c'est le fait d'associer à chacune des lignes de la première table, toutes les lignes de la seconde. Ainsi, si la première table compte 267 lignes et la seconde 1214, on se retrouve avec un résultat contenant 324 138 lignes.
    J'interprète peut être mal mais dans ce cas un complément d'info est le bien venu.

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    A mon sens une jointure est le fait de faire corresponder deux enregistrement d'enssemble différents.

    Les moyens utilisés importent peu, dans ce cas l'utilisation de la syntaxe avec JOIN permet d'expliciter la jointure alors que passer par un produit cartésien (grâce au FROM multiple) puis d'effectuer une selection pour projeter que des informations qui correspondent conduit souvent à avoir une requête peu explicite où l'on ne sais plus ce qui est critère de jointure ou simple selection.

    Bien évidement ce n'est qu'une histoire de terminologie mais les deux écritures suivant sont des jointures et totalement équivalentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM t1, t2
    WHERE t1.id = t2.id_t1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM t1
    INNER JOIN t2 ON t1.id = t2.id_t1
    Utiliser le WHERE dans le but de réaliser une jointure pourrait être considétré sémantiquement faux par certains.

    En effet WHERE devrait uniquement servir à définir des critère de selection alors que ON sert uniquement a définir des critères de jointure or dans la première requête, le WHERE définit un critère de jointure.

    Bien sûr comme dans beaucoup de domaines c'est surtout une question de point de vue, certains irons dans mon sens d'autres non
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut
    merci de vos réponses.
    bon je vais essayer en rajoutant des indexs un peu partout..comme j'ai pas de limite de capacité disque, ça devrait pas poser de problème..

    ps :
    oui j'entendais bien par produit cartésien, une jointure comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM t1, t2
    WHERE t1.id = t2.id_t1

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ok kazou, t'as raison :
    Citation Envoyé par kazou Voir le message
    Les jointures non normalisées ne sont qu'une selection sur un produit cartésien.
    Je ne savais pas (ou plus car j'avais déjà lu le lien suivant ) que l'on parlait également de produit cartésien dans ce cas comme le confirme fsmrel ici de façon très détaillée comme d'habitude
    Autant pour moi.

Discussions similaires

  1. Est-ce qu'une jointure avec JOIN est plus rapide que via le WHERE ?
    Par clavier12AZQSWX dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 13/01/2014, 16h31
  2. Réponses: 13
    Dernier message: 27/06/2011, 18h25
  3. Une liste déroulante est-elle toujours en 1er plan ?
    Par Marc365 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/05/2006, 20h16
  4. une interpolation de forme est elle possible
    Par tetsuo chima dans le forum Flash
    Réponses: 3
    Dernier message: 07/10/2003, 16h31

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