SELECT *, (nlike / (nlike + ndlike)) * rand() AS rnk FROM tbl
order by rnk desc;
我知道ORDER BY RAND()对性能非常不利;但是,我主要关心的是乘以rand()。这会导致系统变慢吗?有什么替代方案吗?
答案 0 :(得分:1)
试图欺骗你的方式无济于事。您正在为每条记录添加一个新的随机计算字段,并按此排序,这将需要与ORDER BY RAND()完全相同的检索策略。
答案 1 :(得分:0)
据推测,您试图将结果限制为某个数字,而不仅仅是命令每个人。
在这种情况下,您可以使用rand()
子句中的where
限制结果,然后根据喜欢/不喜欢公式选择随机子集:
select t.*
from t
where rand() < 0.01
order by (nlike / (nlike + ndlike)) desc
甚至:
order by (nlike / (nlike + ndlike))*rand() desc
此处性能提升的关键是您在排序之前减小了数据的大小。这是一种略微不同的思考问题的方式。首先,您要绘制一个随机样本,然后对它们进行排序。