Maison > base de données > tutoriel mysql > commande mysql par méthode d'optimisation de l'efficacité rand()

commande mysql par méthode d'optimisation de l'efficacité rand()

jacklove
Libérer: 2018-06-08 23:36:50
original
2269 Les gens l'ont consulté

Renvoyer aléatoirement une donnée à partir d'une requête. Généralement, la méthode order by rand() de mysql est utilisée pour obtenir

Par exemple : Au hasard à partir de 200 000. users Extraire 1 utilisateur

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)
Copier après la connexion

Selon les résultats de l'analyse, l'opération prend 0,25 secondes, l'ordre par rand() doit utiliser la table temporaire (Utilisation de temporaire) , vous devez utiliser le tri de fichiers (Utiliser le tri de fichiers) est inefficace.

Méthode d'amélioration

1. Obtenez d'abord le nombre total d'enregistrements interrogés au total
2 Décalez aléatoirement N enregistrements dans le nombre total d'enregistrements (N=0~total-1) <. 🎜>3. Utilisez la limite N,1 pour obtenir des enregistrements

Le code est le suivant :

<?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);?>
Copier après la connexion

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)
Copier après la connexion
Cet article présente la méthode d'optimisation de l'efficacité de la commande mysql par rand() Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.

Recommandations associées :

Interprétation du contenu lié à la base de données de connexion php PDO

Explication de PHP orienté objet, héritage PHP Code associé

Utilisez la méthode magique __CLASS__ en PHP pour obtenir les opérations associées du nom de classe


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
MySQL arrête le processus
Depuis 1970-01-01 08:00:00
0
0
0
Env中mysql
Depuis 1970-01-01 08:00:00
0
0
0
Erreur lors de l'installation de MySQL sous Linux
Depuis 1970-01-01 08:00:00
0
0
0
php - problème de surveillance MySQL
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal