当使用两个参数排序时,优化MySQL随机

时间:2015-03-23 10:59:48

标签: mysql random

我需要从表中获取一些数据并通过两个参数对它们进行排序。其中一个参数是RAND(),因为记录需要是随机的。我有大型数据库,并使用RAND()减慢性能很多,我想避免它。有没有机会优化随机排序的性能?我需要根据计数(从最低到最高)来订购我的结果,然后我需要通过RANDOM进行排序。

这是我正在使用的查询

SELECT c.username, IF(s.Broj IS NULL,0,s.Broj) as Ukupno
FROM user AS c
LEFT JOIN (
  SELECT username, COUNT(*) AS Broj
  FROM odis
  GROUP BY username
) AS s
ON c.username = s.username
ORDER BY s.broj ASC, RAND()

1 个答案:

答案 0 :(得分:0)

我实际上非常怀疑rand()使查询速度比order by慢得多。但是,您可以将rand()放在子查询中,这应该做同样的事情:

SELECT c.username, coalesce(s.Broj, 0) as Ukupno
FROM user c LEFT JOIN
     (SELECT username, COUNT(*) AS Broj, rand() as r
      FROM odis
      GROUP BY username
     ) s
     ON c.username = s.username
ORDER BY Ukupno ASC, r

请注意,r在没有匹配项时会有NULL个值。对于这个组,排序可能不是您想要的随机。