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

Wann ordnet die MySQL-Funktion ORDER BY RAND()?

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: