sql >> Database teknologi >  >> RDS >> Mysql

Fordeling af RAND() i MySQL

Jeg har ikke kunne finde kildekoden til funktionen hurtigt; at se det kan hjælpe med at få et bedre svar. Når det er sagt, så ligner det et 'nej.. men lidt tæt på'.

Fra dokumentation kan jeg se, at det forsøger at være tilfældigt (og eventuelt kan du seede det); men der er to forbehold, der betyder, at det måske ikke altid er ensartet, når du forventer, at det første nummer er i dets dokumentation:

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. 

det vil sige, at koden til den er tvivlsom, da den er en ægte tilfældig talgenerator - den er god nok til de fleste formål, men kan ikke stoles på til brug i f.eks. kryptering, og jeg vil satse, at den ikke engang er som uniform, som du kan forvente.

Deres påstand om, at det ikke er perfekt, betyder, at det næsten helt sikkert vil fejle i det mindste nogle af disse tests; hvordan er stadig uklart, men hvis det ikke er en perfekt RNG, vil du ikke se en perfekt ensartet fordeling; Jeg ville forvente enten huller eller toppe af intervaller, der er mere/mindre almindelige.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (der har været andet arbejde siden, men dette er stadig noget af nøglearbejdet i at validere RNG'er).

Det ville satse, at koden bagved gør det bestemt ikke prøv at garantere en ensartet fordeling, da det ville spilde masser af hukommelse at gøre det (spore historien om, hvad der allerede er kommet op). Under alle omstændigheder, hvis du allerede har genereret en masse værdier ved hjælp af en perfekt RNG, er der intet, der garanterer, at hvis dine værdier indtil videre var lave, vil den næste være høj. Det vil altid være lige så tilfældigt..




  1. Java Server Pages - sortering ved indsættelse i MySql?

  2. Asynkrone opgaver med Django og selleri

  3. Sæt adgang til databasen i kø for at undgå flere cache-elementer

  4. 2 måder at tilføje førende nuller i PostgreSQL