数据库
首页 > 数据库> > MsSQL NEWID是不是像MySQL Rand()那样糟糕

MsSQL NEWID是不是像MySQL Rand()那样糟糕

作者:互联网

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

The problem is, MySQL will have to perform RAND() operation (which takes processing power) for every single row in the table before sorting it and giving you just 1 row.

现在一些工作的家伙,最近发现你可以在使用MsSQL时使用ORDER BY NEWID()(我不太了解).现在,我的问题是,使用NEWID()和使用RAND()同样是一个坏主意 – 如果是这样,那么应该怎么做呢?

解决方法:

这是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()的真正问题是它需要对(可能很大的)random数组进行排序,而不是计算它们.

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

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

> Selecting random rows

但是,此解决方案在SQL Server中不起作用,因为它不支持会话变量.

标签:mysql,random,sql-server,newid
来源: https://codeday.me/bug/20190621/1255375.html