|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : novembre 2006 Messages : 121 ![]() |
Bonjour,
J'ai une requête composée qui prend anormalement beaucoup de temps : Code :
Code :
Ensuite j'ai lancé un profilage de ma requête, et ça crache de partout, je vois plein de "Copying to tmp table", vous pouvez voir tout le profilage ici. Comment faire pour corriger ce problème ? Merci |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Malheureusement MySQL n'a jamais été conçu pour avoir de bonnes performances sur les requêtes, contrairement à une idée reçue...
Voici ce que je Pense de MySQL : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/ Et voici un Benchmark : http://blog.developpez.com/sqlpro/p9...lles-en-sql-1/ Bref, si vous voulez réellement des performances, prenez un vrai SGBD relationnel et non ersatz.... Regardez par exemple du côté de PostGreSQL ou mieux SQL Server (version gratuite avec Express 2008 R2)... Dans l'immédiate, avent de passer à un autre SGBDR plus performant, vérifiez cependant que vous avez bien un index sur : Code :
phpbb_topics (forum_id , topic_poster) Code :
phpbb_users (user_id, username, user_type, user_posts) A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : novembre 2006 Messages : 121 ![]() |
Je viens de chercher "Copying to tmp table" dans le moteur de recherche interne de ce forum :
http://www.developpez.net/forums/d98...-surtout-vues/ http://www.developpez.net/forums/d86...ichiers-mysql/ http://www.developpez.net/forums/d75...ter-jointures/ http://www.developpez.net/forums/d56...le-temporaire/ http://www.developpez.net/forums/d19...lus-courantes/ http://www.developpez.net/forums/d28...ation-requete/ http://www.developpez.net/forums/d11...le-manque-ram/ http://www.phpbb.com/community/viewtopic.php?t=369256 http://www.developpez.net/forums/d11...requete-phpbb/ Et j'ai remarqué que dans beaucoup de ces topics, des tables phpbb sont impliquées. Ça ne va pas être simple je crois, je vais faire des tests avec les tables phpbb_users et phpbb_topics, en ajoutant ou en supprimant des index, en changeant de moteur... |
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
Salut,
si ton champ forum_id n'est pas indexé, ça peut expliquer la lenteur mais normalement phpbb le fait. j'avoue que phpbb est plutot pas très bien programmé sur certains trucs Il semble que mysql refasse la recherche de la sous requête (d'où le re-remplissage de la table temporaire autan de fois) pour chaque itération de la requête principale. Le problème c'est que c'est pas documenté. Au pire tu peux faire la requête temporaire à la main et de faire ta sous requête avec elle du genre: Code sql :
Idéalement le mieux est de faire un procédure stockée qui encapsule tout ça : Code sql :
Bidule est le nom de la bd où tu as mis phpbb. Pour le résultat: |
||||
|
|
00
|
|
|
#5 | ||
|
Membre à l'essai
![]() Inscription : novembre 2006 Messages : 121 ![]() |
Merci, sinon on m'a proposé une requête qui fonctionne impec sur un autre forum :
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
oui c'est assez mal documenté
faut parfois forcer les choses, comme l'obliger à choisir tel index... en tout cas, l'utilisation de procédure stockée est bénéfique en terme de quantité de données échangées entre sgbd et langage interrogeant, et ça simplifie l'écriture de ton code coté applicatif en permettant des choses très compliquée... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com