Ich habe eine ziemlich große Datenmenge und eine Abfrage, die zwei Joins erfordert, so dass die Effizienz der Abfrage sehr wichtig für mich ist. Ich muss 3 zufällige Zeilen aus der Datenbank abrufen, die eine Bedingung basierend auf dem Ergebnis eines Joins erfüllen. Most obvious solution wird als ineffizient here darauf hingewiesen, weilMySQL: Was ist die effizienteste Möglichkeit, mehrere zufällige Zeilen zu wählen
[Diese Lösungen] eine sequentielle Abtastung aller Tabellen müssen (weil der Zufallswert mit jeder Zeile assoziiert muss berechnet werden, - so dass die kleinste bestimmt werden kann) , die sogar für mittelgroße Tische ziemlich langsam sein können.
Jedoch ist das Verfahren dort vom Autor vorgeschlagen (SELECT * FROM table WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table) LIMIT 1
wo num_value ist ID) nicht für mich arbeiten, weil einige IDs fehlen könnte (da einige Zeilen, die von Benutzern gelöscht wurden).
Also, was wäre die effizienteste Möglichkeit, 3 zufällige Zeilen in meiner Situation zu erhalten?
EDIT: die Lösung muss nicht reine SQL sein. Ich benutze auch PHP.
Muss dies reine SQL sein oder haben Sie Zugriff auf eine Skriptsprache? – liquorvicar
Duplizieren? http://stackoverflow.com/questions/4329396/mysql-select-10-random-rows-from-600k-rows-fast – joelparkerhenderson
Ich benutze auch PHP. – sbichenko