通过查询排序在mysql中变得非常慢

时间:2014-03-13 09:20:32

标签: mysql performance sql-order-by query-performance

我有一个简单的查询,如下所示:

SELECT a.UserID, COUNT(1) NoOffriends
FROM UserMst a
LEFT JOIN UserFriends b on b.friendID = a.UserID
GROUP BY a.UserID 
ORDER BY 2 LIMIT 20;

上面的查询有足够的索引和关系,其执行速度仍然很慢。这需要2秒钟,但是当我删除"按顺序排除"从它开始的子句,它是在90毫秒内获取结果。我已经使用EXPLAIN命令检查了执行计划,它显示了我'使用where;使用临时;使用filesort',如何进一步检查?

1 个答案:

答案 0 :(得分:0)

来自doc:

  

可以在以下条件下创建临时表:

     

如果存在ORDER BY子句和不同的GROUP BY子句,或者ORDER BY或   GROUP BY包含除表之外的表中的列   在连接队列中的第一个表中,创建了一个临时表。

无论何时无法从索引执行排序,它都是一个文件排序。你可以看看here

由于您使用计算字段进行排序,因此Mysql必须计算放入文件中的每一行并对其进行排序以仅检索20个第一。如果有大量数据,可能会很长。

删除order by Mysql只需计算20个第一个结果并将其返回。

我没有直接解决方案,但重新考虑您检索此数据的方式。