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 :

Probleme requete avec GROUP BY, optimisation, performance


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 30
    Points : 26
    Points
    26
    Par défaut Probleme requete avec GROUP BY, optimisation, performance
    Bonjour a tous.

    J'ai une table de 2 millions de lignes et je fais une requete du Type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Distinct * 
    FROM Table 
    WHERE MATCH(Titre) AGAINST("ingenieur informaticien" IN BOOLEAN MODE) >= 2
    ---> 0.0007 s // 160000 resultats --> PAS DE PROBLEME

    Le probleme apparait quand je veux trier ces donnes par groupe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Titre, COUNT(Titre) 
    FROM (....) 
    GROUP BY Titre..
    ---> ~4s // 6500 resultats.

    Ca ne parait pas enorme mais si plusieurs requete en meme temps il y a "un crash"

    Erreur : Incorrect key file for table '/tmp/#sql_1495_9.MYI'; try to repair it
    Je voulais savoir s'il existe un moyen d'ameliorer les perf. autrement qu'en faisant une requete plus restrictive...

    Merci bcp

    A+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    Tu as mis quoi comme index sur ta table ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    J ai mis un index sur les Titre. Le probleme c'est qu'il y en a 600 000 differents....

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tu peux aussi faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Titre, COUNT(*) AS Nombre
    FROM laTable
    WHERE Titre LIKE '%ingenieur informaticien%'
    GROUP BY Titre
    HAVING COUNT(*) > 1
    Mais avec le LIKE l'index sur Titre ne sera probablement pas utilisé donc par sûr que ce soit plus performant.

    Et n'ayant jamais utilisé MATCH, je ne sais pas si tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Titre, COUNT(*) AS Nombre
    FROM laTable
    WHERE MATCH(Titre) AGAINST("ingenieur informaticien" IN BOOLEAN MODE) > 1
    GROUP BY Titre
    HAVING COUNT(*) > 1
    Cependant, ton message d'erreur concerne le fichier d'index de la table qu'il faut réparer. Je ne pense pas que ça ait de rapport avec la performance de la requête.

    Au passage, appleler une table `table` est une mauvaise idée car c'est un mot réservé du langage SQL.

    SELECT * n'est pas top non plus, surtout si au final tu ne veux que les titres.

    Quant au DISTINCT, il ne me semble pas utile non plus.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    Merci bcp.

    C'est une affaire de "tolerance". C'est vrai que j'ai envie d'eviter les doublons (d'ou le DISCTINCT *) mais en terme de perf ca plombe la requete et au final l'enlever n'enleve rien en pertinance...

    Je vais faire comme ca.

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

Discussions similaires

  1. Probleme de requete avec group by
    Par Naruto_kun dans le forum PL/SQL
    Réponses: 3
    Dernier message: 07/01/2010, 16h36
  2. Problem requete avec MAX, GROUP BY ...
    Par alexthomas dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/11/2008, 15h58
  3. Probleme requete avec group by
    Par akabou dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/01/2008, 10h28
  4. [Oracle] Requête avec GROUP BY
    Par bud_gw dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/07/2006, 10h26
  5. Requete avec group by
    Par zamilou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 31/03/2006, 08h37

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