mysql order by rand() 优化方法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)根据分析结果,运行需要0.25秒,order by rand() 需要使用临时表(Using temporary),需要使用文件排序(Using filesort),效率低下。 改进方法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)
查看原文:http://newmiracle.cn/?p=1743
mysql order by rand() 优化方法
最新推荐文章于 2024-06-22 10:25:57 发布