J'essaie d'optimiser mes requêtes mysql pour éviter d'utiliser 'temporary, using filesort'. Je pourrais utiliser un peu d'aide. Premier; voici l'expliquerUtilisation temporaire, using filesort une mauvaise idée dans mysql?
est ici de la requête
select pf.*,m.login,m.avatar
from profile_friends pf, members m
where pf.friend_id = m.id and pf.member_id = 16586
order by m.lastLogin desc
limit 0,24;
mysql> EXPLAIN select pf.*,m.login,m.avatar from profile_friends pf, members m where pf.friend_id = m.id and pf.member_id = 16586 order by m.lastLogin desc limit 0,24;
+----+-------------+-------+--------+-----------------------------------------------------+-----------------+---------+--------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------------------------------------------+-----------------+---------+--------------------------+------+----------------------------------------------+
| 1 | SIMPLE | pf | ref | member_id_index,friend_id_index | member_id_index | 4 | const | 160 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | m | eq_ref | PRIMARY,member_id_privacy_index,id_last_login_index | PRIMARY | 4 | mydb.pf.friend_id | 1 | Using where |
Il y a 2 tables impliquées. ProfileFriends (pf), et Membres (m). Cette requête essaie simplement de trouver les 24 amis 'récents' pour cet identifiant de membre particulier. Les moyennes récentes trient par date LastLogin.
Merci
+1 Oui, pour 160 lignes, MySQL peut même conserver la table temporaire en mémoire, sans l'écrire sur le disque. "Filesort" est un peu trompeur, cela signifie seulement qu'il est tri sans le bénéfice d'un index. –