Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
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é ?
Julien.
https://rjuju.github.io/
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 ?
Julien.
https://rjuju.github.io/
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
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.
Julien.
https://rjuju.github.io/
Hors ligne
#8 29/04/2014 20:07:01
- tic1992
- Membre
Re : requete sql lente
ok merci pour votre temps
Hors ligne
Pages : 1