Heim >Datenbank >MySQL-Tutorial >Wie führt man eine einfache Zufallsstichprobe in MySQL effizient durch?

Wie führt man eine einfache Zufallsstichprobe in MySQL effizient durch?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-05 16:03:43561Durchsuche

How to Efficiently Perform Simple Random Sampling in MySQL?

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

  • O(n)-Komplexität , ohne dass eine Sortierung erforderlich ist
  • Nutzt die integrierte rand()-Funktion von MySQL für effiziente Zahlen Generation

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn