mysql - RAND()在MySQL中的分布

标签 mysql

我无法在 MySQL 的文档中找到 RAND() 函数是否使用均匀分布的任何地方。有人知道吗?

最佳答案

我没能快速找到该函数的源代码;看到它可能有助于获得更好的答案。也就是说,它看起来像是“不……但有点接近”。

从文档中我可以看到它试图是随机的(并且您可以选择播种它);但有两个注意事项,这意味着当您期望第一个问题在它的文档中时,它可能并不总是统一的:

RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers on demand that is portable between platforms for the same MySQL version. 

即它的代码作为一个真正的随机数生成器是值得怀疑的——它对于大多数用途来说已经足够好了,但是不能被信任用于加密,我敢打赌甚至不能被信任它是统一的如您所料。

他们声称它并不完美意味着它几乎肯定会至少通过其中一些测试;方法仍然不清楚,但如果它不是完美的 RNG,你将不会看到完美均匀的分布;我希望范围的间隙或峰值更常见/更不常见。 http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (此后还有其他工作,但这仍然是验证 RNG 的一些关键工作)。

它打赌它背后的代码肯定不会尝试保证均匀分布,因为这样做(跟踪已经发生的事情的历史)会浪费大量内存。在任何情况下,如果您已经使用完美的 RNG 生成了很多值,那么没有什么能保证如果您的值到目前为止都很低,那么下一个值会很高。它总是随机的..

关于mysql - RAND()在MySQL中的分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565732/

相关文章:

mysql - 扩展 MySQL 中 varchar 字段的大小会影响其中的数据吗?

Mysql按两列排序,Val1=x,Val2

MySQL SELECT 每个 ID 的存在计数

mysql - 检索每组中的最后一条记录 - MySQL

java - 获取具有相同其他列值的两个连续行的列值

mysql - 计算多列的不同值

java - 如何在java spring boot中使用多个join sql查询

php - 如何在 JSON 中为来自两个不同表的类别的选中 1 或 0 提供响应?

java - 更新重复 key ,命令未正确结束

mysql - 如何避免在 MySQL 中导致对称结果的自连接?