Kategorien

Suchen


Aktuelle Artikel

Archiv


« | Startseite | »

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 »

2 Antworten auf “mySQL: Sortierung nach zufälligen Werten”

  1. Stefan Gläßer meint:
    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?

  2. webandi meint:
    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.

Kommentare