用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > mysql教程

Mysql rand()随机取出记录的优化

时间:2015-01-23  来源:西部数据  作者:西部数据

在mysql中我们要查询数据表中随机数据最常用的就是使用Rand()函数了,但是Rand()函数在使用几万条记录是很快的,如果上千万条时可能会有问题,下面我来介绍Rand()函数的用法.

MySQL随机查询出一条记录,代码如下:

  1. $sql = “SELECT * FROM pinglun WHERE id >= ((SELECT MAX(id) FROM pinglun)-(SELECT MIN(id) FROM pinglun)) * RAND() + (SELECT MIN(id) FROM pinglun) LIMIT 1″; 

这样写效率比较高,千万不要用order by rand()那种,数据量大了,order一下效率很低,下面我来介绍一下 随机取出记录的优化.

第一种方法:结合应用层来实现,只要SELECT MAX(id) FROM table;取出最大的id,然后用随机生成一个1~MAX(id)数,比如PHP mt_rand(1,MAX(id)) 然后再在用这个随机id去查询那条记录.

第二种方法:利用数据库生成的随机的id,子查询的方式,代码如下:

SELECT CEIL(RAND() * (SELECT MAX(id) FROM table));

这样我们就可以获取一个随机的id.(对MAX()进行优化,不使用SELECT CEIL(RAND() * MAX(id)) FROM table),执行一下,大大优化了,代码如下:

  1. SELECT * 
  2. FROM table 
  3. WHERE id >= ( 
  4. SELECT CEIL( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM table ) ) ) 
  7. LIMIT 1 

第三种方法:利用JOIN的方法,代码如下:

  1. SELECT * 
  2. FROM `tableAS t1 
  3. JOIN ( 
  4. SELECT ROUND( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM `table` ) ) AS id 
  7. AS t2 
  8. WHERE t1.id >= t2.id 
  9. ORDER BY t1.id ASC 
  10. LIMIT 1 --phpfensi.com
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门