Heim >Datenbank >MySQL-Tutorial >Wie führt man eine einfache Zufallsstichprobe in MySQL effizient durch?
Effiziente einfache Zufallsstichprobe in MySQL
Viele Anwendungen erfordern die Fähigkeit, eine einfache Zufallsstichprobe aus einer großen Datenbanktabelle zu extrahieren. Allerdings kann die Verwendung der scheinbar intuitiven Methode SELECT * FROM table ORDER BY RAND() LIMIT 10000 für Tabellen mit Millionen von Zeilen unerschwinglich langsam sein.
Schnellere Lösung
Ein effizienterer Ansatz besteht darin, die Funktion rand() zu verwenden, um jeder Zeile eine Zufallszahl zuzuweisen und dann die Tabelle darauf basierend zu filtern Zahl:
SELECT * FROM table WHERE rand() <= 0.3
So funktioniert es
Diese Methode generiert für jede Zeile eine Zufallszahl zwischen 0 und 1. Wenn diese Zahl kleiner oder gleich 0,3 (30 %) ist, wird die Zeile für die Stichprobe ausgewählt.
Vorteile
Verbesserte Version
Für noch mehr Effizienz sollten Sie erwägen, die Zeilen auf das 2- bis 5-fache Ihrer gewünschten Stichprobengröße abzutasten und sie mithilfe von nach der Zufallszahl zu sortieren indexieren und dann die Ergebnisse auf die gewünschte Größe zuschneiden:
SELECT COUNT(*) FROM table; -- Use this to determine rand_low and rand_high SELECT * FROM table WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s ORDER BY RAND() LIMIT 1000
Diese Methode verwendet einen Indexscan, um die Größe der Daten vor dem Sortieren zu reduzieren Es eignet sich für große Tische.
Das obige ist der detaillierte Inhalt vonWie führt man eine einfache Zufallsstichprobe in MySQL effizient durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!