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 :

Exécution requête lente


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 13
    Points
    13
    Par défaut Exécution requête lente
    Bonjour j’implémente un moteur de recherche avancé pour un site web et voici ma requête sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select distinct spip_articles.titre AS t, spip_articles.id_article,spip_articles.id_rubrique,j.titre o, e.titre v, u.titre a, spip_documents.contenu AS c,spip_documents.fichier, u.id_secteur, spip_auteurs.nom as d,spip_mots.titre as f from spip_articles 
            left join  spip_auteurs_articles  on spip_auteurs_articles.id_article= spip_articles.id_article
            left join spip_auteurs  on spip_auteurs.id_auteur= spip_auteurs_articles.id_auteur
            left join  spip_rubriques u  on  u.id_rubrique = spip_articles.id_rubrique
            left join  spip_rubriques e  on  u.id_parent = e.id_rubrique
            left join  spip_rubriques j  on  e.id_parent = j.id_rubrique
            left join spip_mots_articles  on spip_mots_articles.id_article=spip_articles.id_article
            left join spip_mots  on spip_mots.id_mot=spip_mots_articles.id_mot
            left join spip_documents_liens on spip_documents_liens.id_objet=spip_articles.id_article
            left join spip_documents on spip_documents.id_document=spip_documents_liens.id_document
            WHERE ((spip_articles.titre like '".$_GET['mot']."' OR spip_articles.chapo like '".$_GET['mot']."'' OR spip_auteurs.nom LIKE '".$_GET['mot']."' OR u.titre like '".$_GET['mot']."' OR match(spip_documents.contenu) against ('".$_GET['mot']."' IN boolean mode))"
    au moment de l’exécution sa prend du temps "57s" alors si quelqu’un a une idée sur l'optimisation de cette requête je serai très reconnaissante

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    1) Avec des like et des OR dans la clause WHERE c'est assez normal. Commencez par mesurer le temps de réponse sans la clause WHERE, puis avec...
    2) pourquoi faire un DISTINCT ???? Essayez sans... et mesurez le temps de réponse !
    3) Ensuite vous faites 9 jointures externes... Sont-elles toutes raisonnables ? Ou avez vous eu un lot gratuit de LEFT JOIN a écouler ? par exemple existe t-il des articles sans auteurs ou des articles sans mots ?????
    4) quel est l'intérêt de mélanger des LIKE et l'indexation textuelle (d'ailleurs très mal faite et peu performantes dans MyQSL) ? (sachant que le LIKE ou un très faible sous ensemble de FT) ???
    5) les clefs étrangères sont-elles toutes indexées ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 13
    Points
    13
    Par défaut
    merci pour votre réponse !


    je débute en sql je vais testez les premières remarque
    pour la 4eme je n'ai pas bien compris j'ai utilisé les deux parceque j'ai une table faite en myisam idexation des texte integrale et les autres en MYSQL
    pour les left join je les ai remplacé avec de simple join !!
    pour le distinct j'ai des resultats doublon je ne peux pas m'en passer

  4. #4
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    si les left join ne sont pas nécessaire remplace par inner join et rien que ça devrais déjà booster les perf.

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    Et pour compléter SQLpro remplace les OR par des union.



    SQLpro => il faut vraiment que je fasse un bench sur les index full text de MySQL:p

  6. #6
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    spip_rubriques => regarder du coté des arbres par intervalle, autrement plus performant pour faire ce genre de chose, mais là ça implique de revoir le datamodele.

Discussions similaires

  1. [2008R2] Exécution de requête lente à distance
    Par stdebordeau dans le forum SSAS
    Réponses: 3
    Dernier message: 22/07/2013, 18h40
  2. Réponses: 2
    Dernier message: 04/04/2006, 11h46
  3. requète lente (10 min)
    Par jfwatteau dans le forum Access
    Réponses: 3
    Dernier message: 27/12/2005, 09h47
  4. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 07h27
  5. exécuter requête au clic sur valider
    Par rangernoir dans le forum Access
    Réponses: 6
    Dernier message: 09/09/2005, 15h01

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