私はmysqlクエリを最適化しようとしていますが、 'filesortを使用して一時的に使用する'のを避けています。私はいくつかの助けをすることができます。最初;ここでここ一時的な使用、filesortを使用してmysqlの悪い考えですか?
を説明するには、関係する2つのテーブルがありますが、クエリ
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 |
です。プロフィール友人(pf)、およびメンバー(m)。このクエリは、この特定のメンバーIDの '最近の' 24人の友だちを検索しようとしています。最近の手段はLastLoginの日付で並べ替えます。
ありがとうございました
+1はい、160行です。MySQLは、一時テーブルをディスクに書き込まずにメモリに保持することさえあります。 "Filesort"は少し誤解を招くだけで、インデックスの利点なしにソートすることを意味します。 –