Ich habe order by rand () verwendet, um zufällige Zeilen aus der Datenbank ohne Probleme zu generieren, aber ich habe festgestellt, dass rand () eine große Last auf dem Server verursacht, also suchte ich nach einer Alternative und versuchte es mit dem Generieren eine Zufallszahl mit PHP-Rand () -Funktion und setzen Sie das als ID in MySQL Abfrage und es war sehr sehr schnell, da MySQL kannte die Zeile ID aber das Problem ist in meiner Tabelle alle Zahlen sind nicht verfügbar.für Beispiel 1,2,5,9,12 so.
Wenn php rand () die Zahl 3, 4 usw. generiert, ist die Abfrage leer, da es keine ID mit der Nummer 3, 4 usw. gibt.
Was ist der beste Weg, Zufallszahlen aus php zu generieren, aber es sollte die verfügbare no in dieser Tabelle generieren, so dass es überprüfen muss, dass table.please beraten.
%Vor%Die obige Abfrage ist schnell, erzeugt aber manchmal nein, was in der Datenbank nicht verfügbar ist.
%Vor%Die obige Abfrage ist zu langsam und verursacht eine starke Belastung des Servers
Zunächst generieren alle einen zufälligen Wert von 1 bis MAX (id), nicht 100000000.
Dann gibt es mindestens ein paar gute Lösungen:
Verwenden Sie >
nicht =
Erstellen Sie einen Index für (status,id,items)
, um dies zu einer Nur-Index-Abfrage zu machen.
Verwenden Sie =
, versuchen Sie es jedoch erneut mit einem anderen Zufallswert, wenn Sie keinen Treffer finden. Manchmal dauert es mehrere Versuche, aber oft dauert es nur einen Versuch. Das =
sollte schneller sein, da es den Primärschlüssel verwenden kann. Und wenn es schneller ist und es in einem Versuch 90% der Zeit bekommt, könnte das die restlichen 10% der Zeit ausgleichen, wenn es mehr als einen Versuch braucht. Hängt davon ab, wie viele Lücken Sie in Ihren ID-Werten haben.
Sie haben Recht, ORDER BY RAND()
ist keine gute Lösung, wenn Sie mit großen Datenmengen arbeiten. Abhängig davon, wie oft es randomisiert werden muss, können Sie eine Spalte mit einer Zufallszahl erstellen und diese Zahl dann in einem vordefinierten Intervall aktualisieren.
Sie würden diese Spalte verwenden und sie als Sortierindex verwenden. Dies funktioniert gut für eine Umgebung mit starkem Lesezugriff und erzeugt für einen bestimmten Zeitraum eine vorhersagbare zufällige Reihenfolge.