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
jackloveoriginal
2018-06-08 23:36:502241parcourir

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)

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 :

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)
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!

Déclaration:
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