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