从一次查询中随机返回一条数据,一般使用mysql的方法来实现
<强>例如:强>从20万用户中随机抽取1个用户
mysql>从用户订单选择* rand()限制1; + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +电话| | | id密码| |盐country_code ip | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | 15160 | 6549721306 | e4f302120c006880a247b652ad0e42f2 | 86 | 40343586 | 127.0.0.1 | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1行组(0.25秒)mysql>解释从用户订单选择* rand()限制1; + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | id select_type | | |表类型possible_keys关键| | key_len | ref额外| | |行 + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | 1 |简单用户所有零| | |零使用临时零零| | 200303 | |;使用filesort | + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1行组(0.00秒)
根据分析结果,运行需要,order by rand()需要使用临时表,需要使用文件排序,效率低下。
改进方法
& lt; ?php//获取总记录数美元sqlstr=& # 39; select count(*)从用户重新计票# 39;;$查询=mysql_query (sqlstr美元)或死亡(mysql_error());美元统计=作用是(查询)美元;总=美元统计(& # 39;重新计票# 39;);//随机偏移抵消美元=mt_rand(0,大概美元);//偏移后查询$ sqlstr=& # 39; select * & # 39;从用户限制,抵消美元# 39;公司1 & # 39;;$查询=mysql_query (sqlstr美元)或死亡(mysql_error());结果=美元作用($查询); print_r(结果)美元;?在
<强>分析:强>
mysql>选择* 23541(从用户限制,1; + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +电话| | | id密码| |盐country_code ip | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | 23542 | 3740507464 | c8bc1890de179538d8a49cc211859a46 | 86 | 93863419 | 127.0.0.1 | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1行组(0.01秒)mysql>解释选择* 23541(从用户限制,1; + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - | + | id select_type | | |表类型possible_keys关键| | key_len | ref额外| | |行 + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - -用户简单+ | 1 | | |所有零零零零| | | | | 200303 | | NULL + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + + 1行组(0.00秒)
本篇介绍了mysql命令rand()效率优化方法,更多相关内容请关注。
相关推荐:
解读php的PDO连接数据库的相关内容
讲解php面向对象,php继承相关代码
在php中使用魔术方法__CLASS__进行来获取类名的相关操作