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

PHP & Base de données Discussion :

[SQL] Optimisation de mes requêtes SQL


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [SQL] Optimisation de mes requêtes SQL
    Bonjour à tous, afin d'optimiser et d'accélérer mes requetes, j'ai suivi beaucoup de conseil pour optimiser ma base et afficher les données le plus rapidement possible.

    A la recherche de la meilleure optimisation possible, j'hésite entre deux méthodes pour enregistrer les scores de mes joueurs :
    - une table "score" : on ajoute le score du joueur quand il gagne un puzzle
    - une table "score_total" : on update le score_total du joueur quand il gagne un puzzle

    cette méthode me permet ensuite d'afficher plus rapidement le classement des joueurs puisque je n'ai plus qu'a trier la table "score_total" par ordre décroissant.

    ou bien

    - une table "score" : on ajoute le score du joueur quand il gagne un puzzle

    puis lorsqu'on affiche le classement général des scores je fais,
    SELECT SUM(points), joueur AS somme FROM "score" GROUP BY joueur ORDER BY somme DESC

    mais cette requete est tres lente, ma table "score" contient plus de 2 millions de lignes.

    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonjour,
    une table "score_total" : on update le score_total du joueur quand il gagne un puzzle
    ça a l'air préférable, sauf si tu dois pouvoir récupérer plus tard le score pour tel ou tel puzzle pour tel joueur (ie : voir tous les scores du meme joueur pour chaque puzzle).

    Si tu n'as pas besoin de cette fonction , alors tu n'auras au pire que deux champs à retourner pour chaque utilisateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT points, joueur FROM score_total ORDER BY points DESC LIMIT x

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui merci de ta réponse. Mais justement j'affiche aussi pour chaque joueur tous les puzzles qu'il a réussi.

    Pour essayer d'alléger ma table des scores, je pensais faire un classement général par mois (et ainsi conserver les scores uniquement du mois en cours) car aujourd'hui je conserve les scores par puzzles de chaque joueur, ca représente 2 millions de ligne.

    Mais je ne sais pas comment faire pour calculer le score mensuel d'un joueur, si j'utilise ma premiere méthode, il faudrait que je créé une table pour chaque mois ? pour chaque année ?

    si j'utilise la seconde méthode, vu qu'il y a 2 millions de ligne a trier par joueur et par mois et faire la somme, la requete est beaucoup trop lourde.

    Si quelqu'un a des idées, merci d'avance.

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Mais je ne sais pas comment faire pour calculer le score mensuel d'un joueur,
    Si tu as un champ date dans la table, tu peux sortir seulement pour une période donnée (BETWEEN). Tu ne ressortiras donc pas tes 2000000 de lignes.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui mais dans ce cas je suis obliger de faire :

    SELECT DISTINCT joueur, SUM(points) AS somme FROM table_score WHERE date BETWEEN date1 AND date2 GROUP BY joueur ORDER BY somme DESC


    et cette requete prend 10 sec à s'exécuter. C'est beaucoup trop lent.

Discussions similaires

  1. Lecture et optimisation d'une requête SQL
    Par jbrasselet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/10/2007, 15h34
  2. [PL/SQL] Optimisation d'une requête (like?)
    Par elyo66 dans le forum SQL
    Réponses: 15
    Dernier message: 01/06/2007, 19h44
  3. Optimisation d'une requête SQL
    Par Michel601 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2007, 15h17
  4. Optimisation d'une requête SQL
    Par gaboo_bl dans le forum Oracle
    Réponses: 18
    Dernier message: 23/10/2006, 15h33
  5. [MySQL] Optimisation d'une requête sql
    Par fabien14 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/09/2006, 11h45

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