在MySQL中乘以rand()会影响性能吗?

时间:2013-06-01 02:09:34

标签: mysql performance random probability

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

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

2 个答案:

答案 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

此处性能提升的关键是您在排序之前减小了数据的大小。这是一种略微不同的思考问题的方式。首先,您要绘制一个随机样本,然后对它们进行排序。