mysql - 在 mysql 中使用临时文件排序是个坏主意吗?

标签 mysql

我正在尝试优化我的 mysql 查询以避免“使用临时文件排序”。我需要一些帮助。第一的;这是解释

这是查询

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                                  |

涉及到2张表。 ProfileFriends (pf) 和 Members (m)。此查询只是试图为该特定成员(member) ID 查找“最近”的 24 个好友。最近意味着按上次登录日期排序。

谢谢

最佳答案

这是一个问题?是的。

当您处理 160 行时,这是一个问题吗?不。

“文件排序”是一种方法,而不是实际创建文件并对其进行排序。如果我们谈论的是 160,000 行而不是 160 行,那么可能有理由考虑进一步优化。

编辑:另外,您省略了实际的查询运行时间。您正在访问索引并且只处理少数几行。如果此查询花费的时间超过几分之一秒,则可能不值得考虑优化。

关于mysql - 在 mysql 中使用临时文件排序是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382260/

相关文章:

php - Mysql 中的页面 View 计数。更好的方法吗?

mysql - SQL索引优化WHERE查询

mysql - 在单个 MySQL 行中保存多个属性

php - 将 PHP 变量保存到 MySQL INT 始终为 0

c# - 在表单之间传递 MySql DB 数据

mysql - 更改mysql系统表的存储引擎?

php - 检查数据库中是否存在单词以及相邻列的输出数据是否为真

mysql - Ireport:防止细节拆分影响页面总数

python - 具有相同外键的对象的类自动增量字段(Django 1.8、MySQL 5.5)

java - 从 MySQL 数据库获取时间戳列后,使用 AM 而不是 PM 获得意外时间,反之亦然