Ein Weg, den ich ziemlich gut finde, wenn es eine automatisch generierte ID gibt, ist die Verwendung des Modulo-Operators '%'. Zum Beispiel, wenn Sie 10.000 zufällige Datensätze aus 70.000 benötigen, könnten Sie dies vereinfachen, indem Sie sagen, dass Sie 1 von jeweils 7 Zeilen benötigen. Dies kann in dieser Abfrage vereinfacht werden:
SELECT * FROM
table
WHERE
id %
FLOOR(
(SELECT count(1) FROM table)
/ 10000
) = 0;
Wenn das Ergebnis aus der Division der Zielzeilen durch die insgesamt verfügbaren nicht ganzzahlig ist, haben Sie einige zusätzliche Zeilen, als Sie angefordert haben. Daher sollten Sie eine LIMIT-Klausel hinzufügen, um Ihnen zu helfen, das Ergebnis zu trimmen, wie folgt:
SELECT * FROM
table
WHERE
id %
FLOOR(
(SELECT count(1) FROM table)
/ 10000
) = 0
LIMIT 10000;
Dies erfordert zwar einen vollständigen Scan, ist jedoch schneller als ORDER BY RAND und meiner Meinung nach einfacher zu verstehen als andere in diesem Thread erwähnte Optionen. Auch wenn das System, das in die DB schreibt, Zeilensätze in Stapeln erstellt, erhalten Sie möglicherweise nicht das so zufällige Ergebnis, wie Sie es erwartet hatten.
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.)