Vous n'êtes pas identifié(e).

#1 29/04/2014 00:11:25

tic1992
Membre

requete sql lente

Bonjour j’implémente un moteur de recherche avancé pour un site web et voici ma requête sql
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 big_smile

Hors ligne

#2 29/04/2014 00:38:39

rjuju
Administrateur

Re : requete sql lente

Bonjour,

pouvez vous fournir un explain analyze de cette requête, avec votre paramètre valué ?

Hors ligne

#3 29/04/2014 00:52:03

tic1992
Membre

Re : requete sql lente

je n'ai pas accès actuellement au serveur je les mettrai demain  pour le moment c ce que j'ai
starting 0.000182
Opening tables 0.000046
System lock 0.000030
Table lock 0.000016
init 0.000078
optimizing 0.000031
statistics 0.000074
preparing 0.000033
Creating tmp table 0.008222
executing 0.000005
Copying to tmp table 4.344438
Sending data 0.000173
end 0.000003
removing tmp table 0.004125
end 0.000019
query end 0.000005
freeing items 0.000245
logging slow query 0.000003
cleaning up 0.000012

Dernière modification par tic1992 (29/04/2014 11:35:00)

Hors ligne

#4 29/04/2014 12:22:18

tic1992
Membre

Re : requete sql lente

le profilage:

starting 0.000182
Opening tables 0.000046
System lock 0.000030
Table lock 0.000016
init 0.000078
optimizing 0.000031
statistics 0.000074
preparing 0.000033
Creating tmp table 0.008222
executing 0.000005
Copying to tmp table 4.344438
Sending data 0.000173
end 0.000003
removing tmp table 0.004125
end 0.000019
query end 0.000005
freeing items 0.000245
logging slow query 0.000003
cleaning up 0.000012

Hors ligne

#5 29/04/2014 13:31:05

rjuju
Administrateur

Re : requete sql lente

Je parlais d'exécuter la requête suivante :

EXPLAIN ANALYZE SELECT DISTINCT spip_articles.titre AS t,...


sur le serveur postgres et de fournir le résultat de la commande. De ce que je vois dans votre log, cela dure environ 5 secondes ? La majorité du temps est prise par le remplissage d'une table temporaire qui je suppose correspond à votre requête. D'ailleurs pourquoi utiliser une table temporaire ?

Hors ligne

#6 29/04/2014 15:45:49

tic1992
Membre

Re : requete sql lente

voici la requete avec explain :

id    Select_type    table                         type                                 Possible_keys             key                          Key_len             rows                        extra
1    SIMPLE    Spip_mots_articles             index                        Primary,id_mot             primary                    16                    8006                  Using index
1    SIMPLE    Spip_articles                     Eq_ref                        Primary,id_rubrique     primary                     8                     1   
1    SIMPLE    Spip_auteurs_articles             ref                                Primary,id_article             Id_article                     8                     1                  Using where
1    SIMPLE    Spip_documents_liens            index                            NULL                                     primary                    93                  1513               Using index
1    SIMPLE    Spip_documents              Eq_ref                      PRIMARY                            primary                    8                    1   
1    SIMPLE    Spip_auteurs                    Eq_ref                      PRIMARY                        primary                    8                     1   
1    SIMPLE    Spip_mots                            Eq_ref                      PRIMARY                        primary                    8                     1   
1    SIMPLE    u                                    Eq_ref                      Primary,id_parent            primary                    8                     1                  Using where
1    SIMPLE    e                                    Eq_ref                      PRIMARY                      primary                    8                      1   
1    SIMPLE    j                                    Eq_ref                      PRIMARY                            primary                    8                     1   

pour la table temporaire elle se gere automatiquement merci pour votre aide smile

Dernière modification par tic1992 (29/04/2014 15:49:03)

Hors ligne

#7 29/04/2014 19:29:18

rjuju
Administrateur

Re : requete sql lente

Il s'agit d'un plan d'exécution de mysql, pas de postgres. Je vous conseillerais plutôt de chercher de l'aide avec des personnes qui connaissent ce moteur.

Hors ligne

#8 29/04/2014 20:07:01

tic1992
Membre

Re : requete sql lente

ok merci pour votre temps

Hors ligne

Pied de page des forums