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 :

Performance Jointure VS view [MySQL-5.5]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Par défaut Performance Jointure VS view
    Bonjour,

    je viens vers vous pour avoir des avis en terme de performance sur une base relative complexe et surtout très fournis.

    Voici comment s'articule la base:
    Une base articles avec environ 60 champs.
    Dans ces 60 champs il y a 21 champs qui font référence un id d'autres tables (exemple couleur, taille, variétés etc...)
    Par exemple un article dans la table article aura dans le couleur 1 et taille 1 , ce qui correspond a la couleur rouge dans la table couleur et a la taille S pour la table taille.

    Donc je me pose une question maintenant au moment de l'affichage en terme de performance s'il vaut mieux que je passe par de multiple jointure sur ma requête ou si je crées une vue avec toute les jointures sur les champs de faites et que je requête direct sur ma vue ???

    Avec une table démo de 600 articles en faisant un bench entre les deux versions, je trouve que globalement la version jointure a la volée est plus lente mais traite moins de ligne (d'apres les infos de la fonction EXPLAIN) alors que la version en utilisant la vue est légèrement plus rapide mais analyse plus de lignes.

    La différence de temps est d'environ 0.08sec sur mon bench ce qui va un peu a l'encontre de ce que je pensais car j'avais toujours dans l'idée que moins de ligne étaient traité et plus le résultat était rapide

    Par contre le problème c'est que le test est sur 600 articles alors qu'a terme la base va comporter environ 45 millions d'articles (il s'agit d'une base encyclopédique dans un domaine très particulier qui comporte énormément de déclinaison différente d'un même articles d'où la taille énorme)


    merci d'avance de vos avis et/ou questions si besoin d'infos complémentaires.

    PS: ces résultat sont obtenus avec un bench fait en C puisqu'au final le programme sera en C avec déjà une optimisation maximale du code a la compilation pour la machine de test, l'accés se fait via le socket.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    En principe, ça devrait être à peu près pareil puisque une vue n'est rien d'autre qu'une requête enregistrée.

    La différence qui peut arriver en production, c'est que vous n'aurez peut-être pas toujours besoin de faire toutes les jointures sur cette table alors que la vue va toutes les faire systématiquement. Je ne pense pas que l'optimiseur de MySQL soit assez "intelligent" pour le détecter et ignorer de lui même les jointures inutiles.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Par défaut
    effectivement c'est ce qui me faisait penché pour partir sur les jointures meme si au final certaines requetes vont etre assez indigestes.

    mais ce qui m'a interpellé et le résultat de l'analyseur d emYSQL qui me sort que la vue est plus rapide que la requete avec jointure.

    je me disais donc que peut etre il y avait des optimisations spéciales dans le moteur de Innodb pour mieux optimiser le traitement d'une vue en interne qu'une requete avec jointure.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si tu as lancé la requête avant la vue et que la vue a le même texte que la requête, il est possible que MySQL l'ai détecté et ait réutilisé son cache pour donner le résultat plus vite avec la vue qu'avec la requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Par défaut
    effectivement je n'avais pas pris en compte un cache croisé sur les requêtes.

    je vais refaire les tests en prenant soin de supprimer totalement les différents cache avant chaque requêtes pour voir.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Par défaut
    une vue n'est rien d'autre qu'une requête enregistrée
    Si je ne me trompe pas, Mysql stocke bien la requête de création de la vue et non son résultat.
    Je dirais donc qu'il n'est pas avantageux, en terme de performance, d'utiliser des vues avec Mysql.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Pas seulement MySQL mais tous les SGBD enregistrent le script SQL d'une vue, pas son résultat.
    Certains SGBD plus évolués que le mauvais MySQL par contre ont aussi des vues matérialisées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Par défaut
    post sans utilité j'ai trouvé mon erreur.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/10/2008, 12h08
  2. [SQL Server] Jointure entre 2 tables et performances
    Par rmeuser dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/04/2006, 10h12
  3. Réponses: 4
    Dernier message: 07/03/2006, 21h33
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20
  5. Performance Jointure
    Par jflebegue dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 01/12/2004, 22h41

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