Tôi đang cố gắng tối ưu hóa các truy vấn mysql của mình để tránh 'sử dụng tạm thời, sử dụng filesort'. Tôi có thể sự dùng một vài sự giúp đỡ. Đầu tiên; đây là giải thíchSử dụng tạm thời, sử dụng filesort một ý tưởng tồi trong mysql?
Đây là Query
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 |
Có 2 bảng liên quan. ProfileFriends (pf) và Thành viên (m). Truy vấn này chỉ đang cố gắng tìm 24 bạn bè 'gần đây' cho id thành viên cụ thể này. Gần đây có nghĩa là sắp xếp theo ngày LastLogin.
Cảm ơn
+1 Có, cho 160 hàng MySQL thậm chí có thể giữ bảng tạm thời trong bộ nhớ, mà không cần ghi nó vào đĩa. "Filesort" là một chút gây hiểu nhầm, nó chỉ có nghĩa là nó sắp xếp mà không có lợi ích của một chỉ mục. –