De reden dat bestellen via RAND()
traag kan zijn, is dat u de database dwingt om de hele tabel daadwerkelijk te sorteren voordat u iets retourneert. Het verminderen van de belasting naar een enkele tabelscan is veel sneller (zij het nog steeds wat traag).
Dit betekent dat u een deel van de weg kunt krijgen door gewoon de bestelling te vermijden:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Dit selecteert ongeveer 1% van alle rijen in de tabel, sorteert ze en retourneert de top 100. Houd er rekening mee dat het belangrijkste probleem hier (en ook met het antwoord van @cmd) is dat u er niet zeker van kunt zijn dat de zoekopdracht terugkeert helemaal niets.
De bovenstaande benadering zou een scan van de hele tabel moeten omvatten (om te beslissen welke rijen moeten worden gebruikt), gevolgd door een soort van ongeveer 1% van de rijen. Als je veel rijen hebt, kun je het percentage dienovereenkomstig verlagen.