Het verkrijgen van een echt willekeurig record kan traag zijn. Er is niet echt veel om dit feit heen; als je wilt dat het echt willekeurig is, dan moet de query alle relevante gegevens laden om te weten uit welke records het moet kiezen.
Gelukkig zijn er echter snellere manieren om het te doen. Ze zijn niet echt willekeurig, maar als je graag een beetje pure willekeur inruilt voor snelheid, dan zouden ze goed genoeg moeten zijn voor de meeste doeleinden.
Met dat in gedachten is de snelste manier om een "willekeurig" record te krijgen, het toevoegen van een extra kolom aan uw database, die is gevuld met een willekeurige waarde. Misschien een gezouten MD5-hash van de primaire sleutel? Wat dan ook. Voeg geschikte indexen toe aan deze kolom en voeg de kolom vervolgens toe aan uw ORDER BY
clausule in de zoekopdracht, en u krijgt uw records in willekeurige volgorde terug.
Om een enkel willekeurig record te krijgen, specificeert u eenvoudig LIMIT 1
en voeg een WHERE random_field > $random_value
. toe waarbij willekeurige waarde een waarde zou zijn in het bereik van uw nieuwe veld (bijvoorbeeld een MD5-hash van een willekeurig getal).
Natuurlijk is de keerzijde hier dat, hoewel je records in een willekeurige volgorde staan, ze in dezelfde willekeurige volgorde blijven staan. Ik zei wel dat het perfectie inruilde voor vraagsnelheid. Je kunt dit omzeilen door ze regelmatig bij te werken met nieuwe waarden, maar ik denk dat dat een probleem voor je kan zijn als je het vers wilt houden.
Het andere nadeel is dat het toevoegen van een extra kolom misschien te veel gevraagd is als je opslagbeperkingen hebt en je DB al enorm groot is, of dat je een strikte DBA hebt om voorbij te komen voordat je kolommen kunt toevoegen. Maar nogmaals, je moet iets inruilen; als je de zoeksnelheid wilt, heb je deze extra kolom nodig.
Hoe dan ook, ik hoop dat het geholpen heeft.