Heim > Datenbank > MySQL-Tutorial > Wie funktioniert die ORDER BY RAND()-Funktion von MySQL eigentlich?

Wie funktioniert die ORDER BY RAND()-Funktion von MySQL eigentlich?

DDD
Freigeben: 2024-11-03 00:23:02
Original
617 Leute haben es durchsucht

How Does MySQL's ORDER BY RAND() Function Actually Work?

Wie die ORDER BY RAND()-Funktion von MySQL funktioniert

Die ORDER BY RAND()-Funktion von MySQL generiert scheinbar zufällige Ergebnisse, ihr tatsächlicher Mechanismus unterscheidet sich jedoch aus dem weitverbreiteten Glauben. Entgegen der Annahme fügt MySQL keine Spalte mit Zufallswerten hinzu, die die Sortierung beeinflusst. Stattdessen wird der folgende Prozess verwendet:

  1. Generieren einer Zufallszahl: Die Funktion generiert eine Zufallszahl zwischen 0 und 1 für jede Zeile in der Tabelle.
  2. Zeilen sortieren: Die Zeilen werden dann in aufsteigender Reihenfolge basierend auf den generierten Zufallszahlen sortiert.
  3. Daten abrufen: Wenn LIMIT mit ORDER BY RAND() verwendet wird , MySQL ruft Zeilen von oben aus der sortierten Ergebnismenge ab.

Unerwartete Ausführungszeiten

Die bereitgestellten Testabfragen zeigen unerwartete Ausführungszeiten:

Query Execution Time
SELECT * FROM table ORDER BY RAND() LIMIT 1 30-40 seconds
SELECT id FROM table ORDER BY RAND() LIMIT 1 0.25 seconds
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 90 seconds

Diese Variation in der Ausführungszeit ist auf die unterschiedlichen Daten zurückzuführen, die von jeder Abfrage abgerufen werden. Das Auswählen der gesamten Zeile (*) verursacht höhere Kosten im Vergleich zum Abrufen nur bestimmter Spalten (ID) oder zum Abrufen bereits indizierter Daten (ID).

Alternative Methoden für die schnelle Zufallsauswahl

Während ORDER BY RAND() möglicherweise keine optimale Leistung bietet, können alternative Methoden schnellere Ergebnisse liefern:

  • Jays Methode:Verwenden einer Unterabfrage zum Generieren einer zufälligen ID für die Zeilenauswahl ist effizient, kann aber bei der Bearbeitung komplexer Abfragen umständlich werden.
  • Prozedurbasierter Ansatz: Die Implementierung einer Prozedur, die zufällige IDs durchläuft, bis eine gültige Zeile gefunden wird, ist eine effektive Lösung Es kann zu Problemen mit großen Datenlücken kommen.

Das obige ist der detaillierte Inhalt vonWie funktioniert die ORDER BY RAND()-Funktion von MySQL eigentlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage