Sie haben Recht, es wird ORDER BY anwenden, nachdem die Anzahl der Zeilen mit WHERE, GROUP BY und HAVING reduziert wurde. Aber es gilt ORDER BY vor LIMIT.
Wenn Sie also die Anzahl der Zeilen ausreichend herunterfiltern, kann ORDER BY RAND() das erreichen, was Sie wollen, ohne große Auswirkungen auf die Leistung. Code, der einfach und leicht lesbar ist, hat einen legitimen Vorteil.
Das Problem kommt, wenn Sie denken Ihre Abfrage sollte die Zeilen auf etwas Kleines reduzieren, aber im Laufe der Zeit, wenn Ihre Daten wachsen, wird die Anzahl der zu sortierenden Zeilen wieder groß. Da Ihre Abfrage dann LIMIT 10 für das sortierte Ergebnis ausführt, verbirgt sich die Tatsache, dass Sie ORDER BY RAND() für 500.000 Zeilen ausführen. Sie sehen nur, dass die Leistung auf mysteriöse Weise schlechter wird.
Ich habe in meinem Buch SQL Antipatterns:Avoiding the Fallstricke der Datenbankprogrammierung , oder in anderen Antworten hier auf Stack Overflow:
- Auswahl zufälliger Zeilen mit MySQL
- Randomisierung großer Datensätze
- schnelle Auswahl einer zufälligen Zeile aus einer großen Tabelle in mysql