我需要从表中获取一些数据并通过两个参数对它们进行排序。其中一个参数是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()
答案 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
个值。对于这个组,排序可能不是您想要的随机。