Heim > Datenbank > MySQL-Tutorial > Wie kann ich zufällige Zeilen effizient aus einer großen MySQL-Tabelle abrufen?

Wie kann ich zufällige Zeilen effizient aus einer großen MySQL-Tabelle abrufen?

Patricia Arquette
Freigeben: 2024-12-02 11:50:10
Original
543 Leute haben es durchsucht

How to Efficiently Retrieve Random Rows from a Large MySQL Table?

Effizientes Abrufen zufälliger Zeilen in MySQL

Das Auswählen zufälliger Zeilen aus einer großen Datenbanktabelle kann eine Herausforderung sein. Der häufig vorgeschlagene ORDER BY RAND()-Ansatz weist Skalierbarkeitsprobleme auf, wenn die Tabelle größer wird.

Alternativer Ansatz

Eine skalierbarere Methode beinhaltet die Verwendung der nativen Variablenmanipulation und -abfrage von MySQL Verkettungsmöglichkeiten. Hier ist ein Beispiel:

SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Nach dem Login kopieren

Diese Technik berechnet einen zufälligen Offset innerhalb der Tabelle und verwendet ihn, um eine einzelne Zeile effizient abzurufen.

PHP-Implementierung

Wenn Sie PHP bevorzugen, können Sie einen ähnlichen Ansatz wie folgt implementieren (ungetestet):

<?php
$mysqli->begin_transaction();
$result = $mysqli->query("SELECT COUNT(*) FROM mytable");
$row = $result->fetch_row(); 
$count = $row[0]; 
$offset = mt_rand(0, $count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...
$mysqli->commit();
?>
Nach dem Login kopieren

Indem Sie diese nutzen Techniken können Sie effektiv zufällige Zeilen aus großen MySQL-Tabellen abrufen, ohne die Leistung zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWie kann ich zufällige Zeilen effizient aus einer großen MySQL-Tabelle abrufen?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage