554 Stimmen

MySQL wähle 10 zufällige Zeilen aus 600.000 Zeilen schnell

Wie kann ich am besten eine Abfrage schreiben, die 10 Zeilen zufällig aus insgesamt 600.000 auswählt?

19 Stimmen

Hier sind 8 Techniken; vielleicht funktioniert eine davon gut in Ihrem Fall.

0 Stimmen

(Das sind tatsächlich 5 Techniken -- einige waren keine Verbesserungen.)

-4voto

MANOJ Punkte 141

Verwenden Sie die folgende einfache Abfrage, um zufällige Daten aus einer Tabelle zu erhalten.

SELECT user_firstname ,
COUNT(DISTINCT usr_fk_id) cnt
FROM userdetails 
GROUP BY usr_fk_id 
ORDER BY cnt ASC  
LIMIT 10

0 Stimmen

Wenn Sie einen Join-Anweisung und einen Where-Filter verwenden möchten, können Sie dies tun.

3 Stimmen

Von welchem Teil der Abfrage erhalten Sie die Zufälligkeit?

-8voto

Ritesh Patadiya Punkte 123

Ich denke, dies ist der bestmögliche Weg..

SELECT id, id * RAND( ) AS random_no, first_name, last_name
FROM user
ORDER BY random_no

9 Stimmen

Hölle nein, das ist einer der schlimmsten Wege, um zufällige Zeilen aus der Tabelle zu erhalten. Das bedeutet vollständiges Scannen der Tabelle + Sortieren von Dateien + temporäre Tabelle = schlechte Leistung.

1 Stimmen

Abgesehen von der Leistung ist es auch weit entfernt von perfekt zufällig; Sie ordnen nach dem Produkt der ID und einer Zufallszahl statt einfach nach einer Zufallszahl zu ordnen, was bedeutet, dass Zeilen mit niedrigeren IDs dazu neigen, früher in Ihrem Ergebnisset angezeigt zu werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X