Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Bonsoir,
Je cherche à optimiser mon serveur MySQL.
J'ai donc activé la journalisation des requêtes n'utilisant pas d'index.
Il se trouve que, en quelques minutes, j'ai des centaines de lignes du type :
# Query_time: 0 Lock_time: 0 Rows_sent: 1 Rows_examined: 323
SELECT u.*, g.*, o.logged FROM forum_users AS u INNER JOIN forum_groups AS g ON u.group_id=g.g_id LEFT JOIN forum_online AS o ON o.ident='XXXX' WHERE u.id=1;# Query_time: 0 Lock_time: 0 Rows_sent: 0 Rows_examined: 324
SELECT * FROM forum_online WHERE logged<1254680727;# Query_time: 0 Lock_time: 0 Rows_sent: 1 Rows_examined: 324
SELECT u.*, g.*, o.logged FROM forum_users AS u INNER JOIN forum_groups AS g ON u.group_id=g.g_id LEFT JOIN forum_online AS o ON o.ident='XXXX' WHERE u.id=1;# Query_time: 0 Lock_time: 0 Rows_sent: 0 Rows_examined: 325
SELECT * FROM forum_online WHERE logged<1254680727;# Query_time: 0 Lock_time: 0 Rows_sent: 1 Rows_examined: 325
SELECT u.*, g.*, o.logged FROM forum_users AS u INNER JOIN forum_groups AS g ON u.group_id=g.g_id LEFT JOIN forum_online AS o ON o.ident='XXXX' WHERE u.id=1;# Query_time: 0 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
UPDATE forum_online SET logged=1254681927 WHERE ident='XXXX';
où XXXX sont des adresses IP.
Y a-t-il un problème d'index quelque part ?
Merci de votre réponse !
Hors ligne
Il s'agit du journal, non ?
Hors ligne
Ces lignes sont extraites du slow-query.log, ayant activé la journalisation des requêtes n'utilisant pas d'index (dans my.cnf : log-queries-not-using-indexes = 1)
Hors ligne
Puisque tu n'utilises pas d'index, comment pourrait-il y avoir un problème avec ce dernier ?
En revanche, je vois un problème de requête, l'utilisation des * plomb les perfs de la DB. Il est préférable de ne sélectionner que les champs dont on a besoin.
Ensuite je vois un autre problème potentiel, mais j'ai tout de même un doute.
J'ai ouïe dire que les requêtes perdaient en efficience lorsqu'elles comportaient des inner join. les wheres seraient plus efficace. Attention c'est une information à vérifier.
Hors ligne
Merci pour la réponse.
Justement, je ne sais pas s'il faut ajouter des index dans la table MySQL. C'est pour cette raison que j'ai activé la journalisation.
La requête ci-dessus se trouve dans mon fichier include > functions.php :
$result = $db->query('SELECT u.*, g.*, o.logged FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$remote_addr.'\' WHERE u.id=1') or error('Impossible de retrouver les informations d\'invité', __FILE__, __LINE__, $db->error());
C'est donc cette requête qui n'utilise pas d'index, et j'aimerais savoir si on peut en ajouter.
Merci !
Hors ligne
Je dirais qu'on peut toujours en ajouter mais qu'avant de se poser la question des index, j'optimiserais les requêtes.
Hors ligne
Pages : 1