« C#: Webseite im Standardbrowser öffnen (CSharp) | Startseite | Linux: .htaccess Datei mitkopieren »
mySQL: Sortierung nach zufälligen Werten
admin | 30.12.2008
Wenn Sie bei einer mySQL Abfrage (Query) eine Spalte mit zufälligen Werten anfügen möchten, dann nutzen Sie diesen Befehl:
SELECT ID, Name, RAND() FROM Test
Wenn Sie nach dieser Spalte sortieren möchten, dann hilft Ihnen ein einfaches “Order by” mit einem entsprechenden Spaltennamen leider nicht weiter.
Sie müssen dann ein weiteres Feld der Abfrage in die Berechnung einbeziehen. Dann geht’s:
SELECT ID, Name, 0*ID+RAND() AS sort FROM Test ORDER BY sort
Kategorie: MySQL | 2 Kommentare »
19.01.2009 um 13:34
Hallo,
die Abfrage ist leider extrem langsam, wenn die Datenbank/Tabelle hinreichend groß ist. Ein Test auf meiner Buch-Tabelle mit knapp 6 Mio. Einträgen brachte folgendes Ergebnis:
Using index; Using temporary; Using filesort
Ein primary-Key auf der id existiert zwar, der wird aber nicht im Result benutzt. Gibt es dafür nicht schnellere Lösungen?
11.12.2009 um 09:52
Hallo,
also ich habe mir das angeschaut und etwas ausprobiert,
und ich denke, dass ich eine kleine verbesserung habe.
Folgende 2 Abfragen habe ich gestartet
und zeit gemessen.
SELECT ARTNR,0*ARTNR+RAND() AS SORT FROM TAB ORDER BY SORT LIMIT 1000;
Laufzeit: 2.0309569835663 Sekunden
Laufzeit: 2.0223979949951 Sekunden
Laufzeit: 2.229660987854 Sekunden
Laufzeit: 1.9850039482117 Sekunden
Laufzeit: 2.0252089500427 Sekunden
Laufzeit: 1.953647851944 Sekunden
Laufzeit: 1.9900760650635 Sekunden
SELECT ARTNR,RAND() AS SORT FROM TAB ORDER BY RAND() LIMIT 1000;
Laufzeit: 1.9713790416718 Sekunden
Laufzeit: 1.9504129886627 Sekunden
Laufzeit: 1.9866991043091 Sekunden
Laufzeit: 1.974454164505 Sekunden
Laufzeit: 1.8897969722748 Sekunden
Laufzeit: 1.9174280166626 Sekunden
Laufzeit: 1.9092538356781 Sekunden
Zur Info auf ARTNR liegt PK
und die Tabelle TAB hat 2.360.527 Datensätze.
wie man sehen kann, die 2-te Abfrage ist schneller,
nicht viel aber immer hin.