在MySQL中分配RAND()

时间:2013-12-13 11:45:02

标签: mysql

我在MySQL的文档中找不到RAND()函数是否使用统一分布。有谁知道吗?

1 个答案:

答案 0 :(得分:1)

我无法快速找到该功能的源代码;看到它可能有助于获得更好的答案。也就是说,它看起来像'不......但有点亲近'。

从文档中我可以看到它尝试随机(并且可选择你可以播种);但是有两个警告意味着当你期望第一个问题出现在它的文档中时它可能并不总是统一的:

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生成了很多值,那么没有什么能保证如果你的值到目前为止都很低,那么下一个值就会很高。它总是随机的..