Heim  >  Artikel  >  Datenbank  >  Effizienzoptimierungsmethode für MySQL Order by Rand()

Effizienzoptimierungsmethode für MySQL Order by Rand()

jacklove
jackloveOriginal
2018-06-08 23:36:502093Durchsuche

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.

Verbesserungsmethode

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn