MySql – Ergebnisse zufällig sortieren

Minitutorials

MySql – Ergebnisse zufällig sortieren

MySql – Ergebnisse zufällig sortieren

Manchmal wünscht man sich bei einer MySql Abfrage eine zufällige Reihenfolge der Ergebnisse. Für diesen Zweck gibt es die MySql-Funktion rand().

Fügt man diese in seine “order by”-Klausel ein werden die Ergebnisse zufällig sortiert. Das ganze sieht in etwa so aus:

select * from tabellenname order by rand()

Dabei ist bei größeren Ergebnismengen folgendes zu beachten: Wie bei allen MySql Funktionen die innerhalb einer Abfrage ausgeführt werden wirkt sich auch rand() negativ auf die Performance aus. Wenn das Ergebnis nur wenige Zeilen zurückgibt ist es mit sicherheit kein Problem. Bei 1.000 oder 10.000 Datensätzen verzögert sich die Abfrage schon um einige 100stel Sekunden. Das mag auf den ersten Blick nicht viel sein, bei performancekritischen Anwendungen, oder solchen die viele gleichzeitige Zugriffe haben, entwickelt sich dieser Umstand allerdings zum Nachteil.

In solchen Fällen bietet es sich an in die zufällig zu sortierende Tabelle eine weitere Spalte einzufügen. Für diese wird dann als Datentyp double vorgesehen und ein entsprechender Index gesetzt. Der Insert-Befehl muss dann jeweils ergänzt werden:

insert into tabellenname set feld1=’wert1′, feld2=’wert2′, random=rand();

Sortiert man dann direkt über das Index-Feld random arbeitet die Abfrage erheblich schneller. Jedoch sollte vorher abgewogen werden, ob die sortierung über das neue Feld sich schlussendlich nicht doch als nachteilig erweist. Dies wäre dann der Fall, wenn die Abfrage nur selten gebraucht wird und dem MySql Server nur wenig Arbeitsspeicher zur Verfügung steht. Denn dann blockiert der zusätzliche Index möglicherweise unnötig den Speicher, den andere Abfragen nötiger bräuchten.

Diskussion

Keine Kommentare zu “MySql – Ergebnisse zufällig sortieren”

Post a comment