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 :

Création des bons index pour une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut Création des bons index pour une requête
    Bonjour à tous,
    je bloque sur l'optimisation d'une requête, qui met beaucoup trop de temps à mon gout alors que je suis sur qu'avec les bons index elle pourrait être très rapide.

    Voilà le principe : il s'agit d'un script open source de forums, et j'ai besoin de récupérer le sujet le plus fréquenté pour un membre donné.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t_id, COUNT(*) AS total
    FROM posts
    WHERE u_id = $id_du_membre
    AND f_id IN ($liste_des_forums_que_le_membre_peut_lire)
    GROUP BY t_id
    ORDER BY total DESC
    LIMIT 1
    Voici les champs principaux de ma table :
    posts (liste des messages sur l'ensemble du forum)
    -----
    p_id (int) ID du message
    t_id (int) ID du sujet
    f_id (int) ID du forum
    u_id (int) ID du membre qui a posté ce message

    Initialement, j'étais partie sur l'idée d'un index que j'appel topic_per_user et qui a comme champs, dans l'ordre u_id et t_id. Cet index fonctionne parfaitement tant que je n'ajoute pas la restriction sur le champ f_id. Cependant dès que je l'ajoute, la requête redevient lente et l'index n'est plus optimisé. Comment puis je intégrer cette restriction sur le champ f_id à mon index ? Que me conseillez vous de faire pour optimiser tout ça ?

    Je vous remercie !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Tu devrais essayer de remplacer le IN par une jointure INNER JOIN sur la table forums.

  3. #3
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Bonjour,
    je viens de tester et c'est toujours aussi lent, je pense honnêtement que l'optimisation est à faire au niveau des index, mais je n'arrive pas à trouver le bon index qui prendrait en compte t_id, u_id et f_id. Je sais que l'ordre de déclaration des champs dans un index est important pourtant.

Discussions similaires

  1. Utilisation INDEX pour une requête
    Par k o D dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/07/2012, 08h47
  2. Quel index pour une requête bornée ?
    Par Michel Rotta dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/02/2011, 16h34
  3. Réponses: 8
    Dernier message: 10/05/2009, 18h21
  4. Réponses: 4
    Dernier message: 09/01/2007, 11h31
  5. logging des index pour une BD standby
    Par learn dans le forum Oracle
    Réponses: 8
    Dernier message: 14/12/2005, 12h14

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