MySQL如何通过内置函数生成随机数

记得有一次,我在一家小咖啡馆里,看着窗外的人群,突然想尝试一下MySQL的RAND()函数。
我打开电脑,写了一条简单的SQL语句:RAND SELECT(),然后执行。
结果屏幕上出现了0.8 7 6 5 4 3 2 1 0这样的数字。
我一时慌了,随机数是这样的。

后来,如果我想生成一个 1 到 1 00 之间的随机整数怎么办?我尝试使用公式FLOOR(1 +RAND()1 00),果然,执行后,我得到了一个1 到1 00之间的数字,例如4 5 我尝试了SELECT FROM table ORDER BY RAND(),返回的结果集是随机顺序的。

但我也注意到,当我们使用 RAND() 函数时,会为每个查询生成一个新的随机数。
如果我想获得可重复的随机顺序怎么办?我应该吗?我突然在SQL语句中添加了RAND(1 2 3 )。
那天,我一边喝咖啡一边玩随机函数。
等等,我突然意识到,如果对大量数据进行随机化,可能会损害性能。
你必须这样做。

如何从mysql数据库的一张表中按不同的比例随机取数据?

随机排序并选择前十项的效率很低,并且在高负载下可能会导致问题。
直接使用随机排序速度很慢。

使用SQL语句取随机数的方法

说白了,SQL随机选择2 0条记录。
这可以通过三种方式完成。
然而,使用错误的字段或版本差异可能会导致偏差。
我们先来说说最重要的事情。
使用 NEWID() 是使用 SQL Server 的最佳方式。
去年我们跑百万级别的用户活跃度表时,可以直接从用户中SELECT ORDER BY NEWID()前2 0名,秒级出结果。
但是,请勿使用 RAND()。
它每次都会随机化主键顺序,因此没有用。
还有一点,Access中的Rnd(-ID)操作固然很好玩,但是记住ID必须是变长字段,比如Rnd(-Len(UserName))。
否则,随机性会很低。
一开始我以为是随机的,后来发现所有用户都叫张三。
说实话,我很困惑。
还有另一个重要的细节。
MySQL 的 ORDER BY RAND() 在数据量较大时对性能影响很大。
测出数据量为3 000时1 秒后停止,必须加上LIMIT 2 0才能完成。
等等,还有一件事。
Oracle 的 ROWNUM 玩法需要两层嵌套。
WHERE ROWNUM < 1>您必须使用子查询。
很多人不注意这一点。

一开始我以为所有数据库中的随机逻辑都是类似的,但是后来我发现MySQL和SQL Server中的RAND()/NEWID()并不是完全一样的东西。
前者是伪随机数生成器,而后者是真正的随机数。
等一下,还有一件事。
如果表有自增ID且数据量较大,直接使用ORDER BY ID WHERE ROWNUM < 2>
除了阅读手册之外,我们建议执行其他本地测试。
您认为使用 LIMIT 2 0 和随机 ID (RAND() MAX_ID) 可以吗?

怎么从mysql中随机取出10条数据