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 :

Problème de performances


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Problème de performances
    Bonjour à toutes et à tous,

    J'ai un gros problème de performance sur une base Maria DB.

    SELECT * FROM <table> WHERE nom like '%individu%' => instantané
    SELECT * FROM (SELECT * FROM <table> WHERE nom like '%individu%') => 10s

    Mais ce problème est aléatoire, parfois elle est instantanée, parfois elle met 10s, problème de paramétrage ? de cache ?

    Si quelqu'un a une idée.

    Merci par avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Une requête ayant un filtrage WHERE colonne like '%xxxx%' ne sera jamais performante : le prédicat n'est pas sargable (aucun index éligible) du coup la stratégie d'accès sera un table scan ou un index scan s'il existe un index couvrant.
    Comme ici il s'agit d'un SELECT *, ce sera un table scan.

    Si le temps d'exécution est rapide, c'est que les volumes sont très réduits, la même requête sur une table un peu chargée, quelques millions de lignes par exemple, prendra du temps.

    Pourquoi vouloir imbriquer la requête dans une autre ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Oui je comprends mais du coup, la durée d'exécution devrait-être la même dans les 2 cas tout de même, non ?

    Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Je le suppose mais il faudrait vérifier les stratégies respectives choisies par l'optimiseur : un explain permet de s'en assurer

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Je le suppose mais il faudrait vérifier les stratégies respectives choisies par l'optimiseur : un explain permet de s'en assurer
    Testé avec mysql ce jour, pas de problème, le temps est bien identique.
    Mystère de MariaDB...

    Merci

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    plus probablement : vous mesurez le temps elapsed et non pas le temps CPU.
    Le temps CPU est toujours le même, mais le temps elapsed dépend du contexte (nombre de connexions simultanées, sollicitation de la CPU par d'autres process...)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Merci mais il s'agit du même contexte car nous avons isolé le problème sur un serveur et une BDD indépendante.

  8. #8
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM <table> WHERE nom like '%individu%' => instantané
    SELECT * FROM (SELECT * FROM <table> WHERE nom like '%individu%')
    A quoi sert votre deuxième requête ?
    Dans les deux cas, vous n'aurez aucune garantie d'une quelconque performance
    Un Where like 'individu%' peut être optimisé, à condition de poser un index sur la colonne
    Par contre WHERE LIKE '%individu%' non.

    Citation Envoyé par Bishoot Voir le message
    Bonjour,
    Oui je comprends mais du coup, la durée d'exécution devrait-être la même dans les 2 cas tout de même, non ?
    Merci
    Il est déjà impossible que vous obteniez des temps d'exécution identiques pour une seule requête.
    L'exécution d'une requête est dynamique et donc dépend du contexte : CPU, RAM, Mise en Cache, Nombre de connexions en cours...

    Une recherche FULLTEXT peut être appropriée pour votre cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE <table> ADD FULLTEXT index_nom_idx_ft (nom);
    SELECT * FROM <table> WHERE MATCH(nom) AGAINST ('individu');

Discussions similaires

  1. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  2. [jeu]problème de performance d'un algo
    Par le Daoud dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 30/05/2005, 16h07
  3. [C#] Probléme de performance avec IsDbNull
    Par jab dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/04/2005, 11h39
  4. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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