4

根据这篇文章: http: //net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/ 使用 ORDER BY RAND() 是一个坏主意,因为:

问题是,MySQL 必须对表中的每一行执行 RAND() 操作(需要处理能力),然后再对其进行排序并只给你 1 行。

现在一些工作的家伙,最近发现你可以在使用 MsSQL 时使用 ORDER BY NEWID() (我不太了解)。现在,我的问题是,使用 NEWID() 和使用 RAND() 一样糟糕吗?如果是,那么应该怎么做?

4

2 回答 2

5

MySQL这是's调用的代码RAND()

double my_rnd(struct rand_struct *rand_st)
{
  rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value;
  rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value;
  return (((double) rand_st->seed1)/rand_st->max_value_dbl);
}

您可以评估几个间接、加法和模数所需的处理能力。

真正的问题ORDER BY RAND()是它需要对随机数(可能很大)数组进行排序,而不是计算它们。

当然,同样的问题也存在SQL Server

MySQL中,您可以避免对抽样随机记录进行排序:

但是,此解决方案无法使用,SQL Server因为它不支持会话变量。

于 2011-03-31T14:45:21.247 回答
0

这是一篇关于如何选择随机行的优秀文章,MSSQL 和 MySQL 的伪代码:改进 Order by rand 和 order by newid

于 2011-09-05T23:42:50.977 回答