-2
SELECT *, (nlike  / (nlike + ndlike)) * rand() AS rnk FROM tbl
order by rnk desc;

我知道 ORDER BY RAND() 对性能非常不利。但是,我主要关心乘以 rand()。这会导致系统变慢吗?有什么替代方法吗?

4

2 回答 2

1

试图欺骗你的方式将无济于事。您正在为每条记录添加一个随机计算的新字段,并按此排序,这将需要与 ORDER BY RAND() 完全相同的检索策略。

于 2013-06-01T02:21:54.433 回答
0

据推测,您正试图将结果限制在某个数字上,而不是仅仅对每个人进行排序。

在这种情况下,您可以限制rand()where子句中使用的结果,然后根据喜欢/不喜欢公式选择一个随机子集:

select t.*
from t
where rand() < 0.01
order by (nlike  / (nlike + ndlike)) desc

甚至:

order by (nlike  / (nlike + ndlike))*rand() desc

此处性能提升的关键是您在排序之前减少了数据的大小。这是一种稍微不同的思考问题的方式。首先,您正在抽取一个随机样本,然后订购它们。

于 2013-06-01T06:16:52.153 回答