Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verteilung von RAND() in MySQL

Ich konnte den Quellcode für die Funktion nicht schnell finden; Wenn Sie es sehen, können Sie möglicherweise eine bessere Antwort erhalten. Das heißt, es sieht aus wie ein "Nein ... aber irgendwie nah".

Aus der Dokumentation kann ich ersehen, dass es versucht, zufällig zu sein (und optional können Sie es aussäen); aber es gibt zwei Vorbehalte, die bedeuten, dass es möglicherweise nicht immer einheitlich ist, wenn Sie es für die erste Ausgabe in seiner Dokumentation erwarten:

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. 

Das heißt, der Code dafür ist fragwürdig, da er ein echter Zufallszahlengenerator ist - er ist für die meisten Zwecke gut genug, kann aber beispielsweise nicht für die Verwendung in der Verschlüsselung verwendet werden, und ich würde wetten, dass nicht einmal darauf vertraut werden kann Uniform, wie Sie es erwarten können.

Ihre Behauptung, dass es nicht perfekt ist, bedeutet, dass es mit ziemlicher Sicherheit zumindest einige dieser Tests nicht bestehen wird; das Wie ist noch unklar, aber wenn es kein perfekter RNG ist, werden Sie keine perfekt gleichmäßige Verteilung sehen; Ich würde entweder Lücken oder Spitzen von Bereichen erwarten, die mehr/weniger häufig vorkommen .ps">http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (seitdem gab es andere Arbeiten, aber dies ist immer noch eine der wichtigsten Arbeiten bei der Validierung von RNGs).

Es würde wetten, dass der Code dahinter sicherlich nicht ist Versuchen Sie, eine gleichmäßige Verteilung zu gewährleisten, da dies (Verfolgen der Geschichte dessen, was bereits aufgetreten ist) Unmengen an Speicher verschwenden würde. In jedem Fall, wenn Sie bereits viele Werte mit einem perfekten RNG generiert haben, garantiert nichts, dass, wenn Ihre Werte bisher alle niedrig waren, der nächste hoch sein wird. Es wird immer genauso zufällig sein..