Ich baue eine Website, wo ich zufällig gewichteten Datensatz aus der Datenbank wählen muss.Fast mysql zufällige gewichtete Wahl auf große Datenbank
Es gibt einen snipped von Code in SQL : select one row randomly, but taking into account a weight
SELECT t.*, RAND() * t.weight AS w
FROM table t
ORDER BY w DESC
LIMIT 1
Es funktioniert auf kleine Stichprobe von Datensätzen in Ordnung.
Wenn ich fast 1 Million Datensätze anwende, wird es langsam (1,3 - 1,8 Sekunden) auf meinem lokalen Rechner, und ich nehme an, dass ich noch länger auf noch größeren Sets nehmen würde.
Wie könnte es optimiert werden? Gibt es bessere Möglichkeiten, einen gewichteten Datensatz nach dem Zufallsprinzip auszuwählen?
Mein Versuch wäre es, die Gewichte regelmäßig zu berechnen, sie in einer separaten Tabelle zu speichern, die Zufallszahl programmatisch zu wählen und nach dem nächsten Datensatz zu dieser Nummer zu suchen.