Heim > Datenbank > MySQL-Tutorial > Hauptteil

Effizienzoptimierungsmethode für MySQL Order by Rand()

jacklove
Freigeben: 2018-06-08 23:36:50
Original
2152 Leute haben es durchsucht

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)
Nach dem Login kopieren

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:

<?php// 获取总记录数$sqlstr = &#39;select count(*) as recount from user&#39;;$query = mysql_query($sqlstr) or die(mysql_error());$stat = mysql_fetch_assoc($query);$total = $stat[&#39;recount&#39;];// 随机偏移$offset = mt_rand(0, $total-1);// 偏移后查询$sqlstr = &#39;select * from user limit &#39;.$offset.&#39;,1&#39;;$query = mysql_query($sqlstr) or die(mysql_error());$result = mysql_fetch_assoc($query);
print_r($result);?>
Nach dem Login kopieren

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)
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!