Esb*_*ben 4 mysql sql-server random newid
根据这篇文章:http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/ 使用ORDER BY RAND()是一个坏主意,因为:
问题是,MySQL必须对表中的每一行执行RAND()操作(它需要处理能力),然后才对其进行排序并只给你一行.
现在一些工作的家伙,最近发现你可以在使用MsSQL时使用ORDER BY NEWID()(我不太了解).现在,我的问题是,使用NEWID()和使用RAND()同样是一个坏主意 - 如果是这样,那么应该怎么做呢?
这是由MySQLs 调用的代码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);
}
Run Code Online (Sandbox Code Playgroud)
您可以评估几个间接,添加和模数所需的处理能力.
真正的问题ORDER BY RAND()是它需要对(可能很大的)random数组进行排序,而不是计算它们.
SQL Server当然也存在同样的问题.
在MySQL,您可以避免排序采样随机记录:
但是,此解决方案不起作用,SQL Server因为它不支持会话变量.
| 归档时间: |
|
| 查看次数: |
5726 次 |
| 最近记录: |