首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MsSQL是不是像MySQL Rand()那样糟糕?

问MsSQL是不是像MySQL Rand()那样糟糕?
EN

Stack Overflow用户
提问于 2011-03-31 14:30:59
回答 2查看 5.9K关注 0票数 4

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-31 14:45:21

下面是MySQL的RAND()调用的代码

代码语言:javascript
复制
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中工作,因为它不支持会话变量。

票数 5
EN

Stack Overflow用户

发布于 2011-09-05 23:42:50

下面是一篇关于如何选择随机行的优秀文章,MSSQL和MySQL:通过兰特和网络改进订单的伪代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5501489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档