Maison > Article > base de données > commande mysql par méthode d'optimisation de l'efficacité rand()
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.
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!