Heim >Datenbank >MySQL-Tutorial >Effizienzoptimierungsmethode für MySQL Order by Rand()
Zufällige Rückgabe eines Datenelements aus einer Abfrage. Im Allgemeinen wird die Methode order by rand() von MySQL verwendet, um
Zum Beispiel: Zufällig aus 200.000 zu erreichen Benutzer 1 Benutzer extrahieren
mysql> select * from user order by rand() limit 1; +-------+------------+----------------------------------+----------+--------------+-----------+| id | phone | password | salt | country_code | ip | +-------+------------+----------------------------------+----------+--------------+-----------+| 15160 | 6549721306 | e4f302120c006880a247b652ad0e42f2 | 40343586 | 86 | 127.0.0.1 | +-------+------------+----------------------------------+----------+--------------+-----------+1 row in set (0.25 sec)mysql> explain select * from user order by rand() limit 1; +----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 200303 | Using temporary; Using filesort | +----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+1 row in set (0.00 sec)
Laut den Analyseergebnissen dauert der Vorgang 0,25 Sekunden, die Bestellung nach rand() muss die temporäre Tabelle verwenden (Verwendung von temporär) und muss die Dateisortierung (Verwenden von Dateisortierung) verwenden, was ineffizient ist.
Ermitteln Sie zunächst die Gesamtzahl der abgefragten Datensätze
2. Versetzen Sie N Datensätze zufällig in die Gesamtzahl der Datensätze (N=0~Gesamt-1). 🎜>3. Verwenden Sie Limit N,1, um Datensätze zu erhalten
Der Code lautet wie folgt:
2db7ab7aeda548b1a568b7abef045e28
Analyse:
mysql> select * from user limit 23541,1; +-------+------------+----------------------------------+----------+--------------+-----------+| id | phone | password | salt | country_code | ip | +-------+------------+----------------------------------+----------+--------------+-----------+| 23542 | 3740507464 | c8bc1890de179538d8a49cc211859a46 | 93863419 | 86 | 127.0.0.1 | +-------+------------+----------------------------------+----------+--------------+-----------+1 row in set (0.01 sec)mysql> explain select * from user limit 23541,1; +----+-------------+-------+------+---------------+------+---------+------+--------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+--------+-------+| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 200303 | NULL | +----+-------------+-------+------+---------------+------+---------+------+--------+-------+1 row in set (0.00 sec)Dies In diesem Artikel wird die Effizienzoptimierungsmethode „Order by Rand()“ von MySQL vorgestellt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website. Verwandte Empfehlungen:
Interpretation von Inhalten im Zusammenhang mit der PHP-PDO-Verbindungsdatenbank
Erklärung der objektorientierten PHP-Vererbung verwandter Code
Verwenden Sie die magische Methode __CLASS__ in PHP, um verwandte Operationen des Klassennamens abzurufen
Das obige ist der detaillierte Inhalt vonEffizienzoptimierungsmethode für MySQL Order by Rand(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!