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

Einfache Zufallsstichproben aus einer SQL-Datenbank

Ich denke, die schnellste Lösung ist

select * from table where rand() <= .3

Hier ist, warum ich denke, dass dies den Job machen sollte.

  • Es wird eine Zufallszahl für jede Zeile erstellt. Die Zahl liegt zwischen 0 und 1
  • Er prüft, ob diese Zeile angezeigt werden soll, wenn die generierte Zahl zwischen 0 und 0,3 (30 %) liegt.

Dies setzt voraus, dass rand() Zahlen in einer gleichmäßigen Verteilung generiert. Das geht am schnellsten.

Ich habe gesehen, dass jemand diese Lösung empfohlen hat und ohne Beweise abgeschossen wurde. Hier ist, was ich dazu sagen würde -

  • Dies ist O(n), aber es ist keine Sortierung erforderlich, daher ist es schneller als O(n lg n)
  • mysql ist sehr gut in der Lage, Zufallszahlen für jede Zeile zu generieren. Versuchen Sie dies -

    select rand() from INFORMATION_SCHEMA.TABLES limit 10;

Da es sich bei der betreffenden Datenbank um mySQL handelt, ist dies die richtige Lösung.