mysql的order by兰德方法实际运用

  

从一次查询中随机返回一条数据,一般使用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()需要使用临时表,需要使用文件排序,效率低下。

改进方法

 mysql的order by兰德方法实际运用“> </p> <p> 1。首先获取查询的总记录条数总数<br/> 2。在总记录条数中随机偏移N条(N=0 ~大概)<br/> 3。使用限制N, 1获取记录<br/> <强>代码如下:</强> </p> <pre类= & 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__进行来获取类名的相关操作

mysql的order by兰德方法实际运用