根据本文:http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/使用RAND()的ORDER是个坏主意,因为:
问题是,MySQL必须对表中的每一行执行RAND()操作(这需要处理能力),然后再对其进行排序,只给您1行。
现在,一些工作人员最近发现,在使用MsSQL时,可以使用NEWID()的ORDER (我对此不太了解)。现在,我的问题是,使用NEWID()和使用RAND()一样糟糕吗?如果是,那么应该如何做呢?
发布于 2011-03-31 14:45:21
下面是MySQL的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-09-05 23:42:50
下面是一篇关于如何选择随机行的优秀文章,MSSQL和MySQL:通过兰特和网络改进订单的伪代码。
https://stackoverflow.com/questions/5501489
复制相似问题