Also in MySQL, ich habe gelesen, dass für große Tabellen mit vielen Zeilen, ORDER BY RAND() ist eine schlechte Idee (auch mit ~ 500 Row-Tabellen, angeblich). Langsam und ineffizient. Viele Zeilen scannen.Gute Idee/schlechte Idee? Verwenden von MySQL RAND() außerhalb eines kleinen Satzes von Unterabfrageergebnissen?
Wie scheint dies (unten) für eine Alternative?
SELECT * FROM (... Unterabfrage, die im Allgemeinen einen Satz von weniger als 20 Zeilen zurückgibt ...) ORDER BY RAND() LIMIT 8
Anstelle der Verwendung von RAND() auf einer großen Menge von Daten, Ich würde eine kleine Teilmenge auswählen, und nur dann würde ich RAND() auf diese zurückgegebenen Zeilen anwenden. In 99,9% aller Fälle sollte die oben genannte Unterabfrage weniger als 20 Zeilen auswählen (und in der Regel sind es weniger als 8 Zeilen).
Neugierig zu hören, was die Leute denken.
(nur als Referenz, ich mache meine MySQL Sachen mit PHP.)
Dank!
Klingt nicht wie es ein Problem sein würde. Aber wie immer, Your Mileage May Vary (tm). Führen Sie ein Benchmarking dieser Subselect-Methode und ein Benchmarking der Auswahl aus der vollständigen Tabelle durch und sehen Sie, wo Sie hinkommen. –
** Nicht wirklich ** Query-Cache hat keine Auswirkungen auf rand() (Bypass-Query-Cache), so dass der Engpass jetzt auf die Unterabfrage verschoben – ajreal
Wenn die Unterabfrage "in der Regel weniger als 8" zurückgibt, warum genau tun Sie benötigen die 'ORDER BY RAND() LIMIT 8'? –