Mysql rand()随机取出记录的优化
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-03 14:15:54 浏览: 评论:0
在mysql中我们要查询数据表中随机数据最常用的就是使用Rand()函数了,但是Rand()函数在使用几万条记录是很快的,如果上千万条时可能会有问题,下面我来介绍Rand()函数的用法.
MySQL随机查询出一条记录,代码如下:
- $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),执行一下,大大优化了,代码如下:
- SELECT *
- FROM table
- WHERE id >= (
- SELECT CEIL( RAND( ) * (
- SELECT MAX( id )
- FROM table ) ) )
- LIMIT 1
第三种方法:利用JOIN的方法,代码如下:
- SELECT *
- FROM `table` AS t1
- JOIN (
- SELECT ROUND( RAND( ) * (
- SELECT MAX( id )
- FROM `table` ) ) AS id
- ) AS t2
- WHERE t1.id >= t2.id
- ORDER BY t1.id ASC
- LIMIT 1 --phpfensi.com
Tags: rand()随机记录 mysql优化
相关文章
- ·Mysql线程池优化笔记(2014-09-23)
- ·mysql服务器常见的优化方法(2014-09-24)
- ·mysql优化配置之max_allowed_packet设置(2014-09-24)
- ·MySQL数据库高并发优化配置(2014-09-24)
- ·mysql优化参数thread_cache_size(2014-09-24)
- ·MySQL写入插入数据优化配置(2014-09-25)
- ·mysql优化之show status查看MySQL服务器状态信息(2014-09-26)
- ·MySQL数据库mysqlcheck优化表方法详解(2014-09-28)
- ·mysql取随机数据慢优化方法(2014-09-28)
- ·Mysql 数据库优化利器 PROCEDURE ANALYSE(2014-10-02)
- ·MySQl优化千万数据级快速分页sql语句(2014-10-08)
- ·mySQL优化my.ini配置详解说明(2014-10-08)
- ·MyISAM和InnoDB不同与优化方法(2014-10-14)
- ·Mysql limit 优化,百万至千万条记录实现快速分页(2014-10-14)
- ·mysql中索引使用一些优化方法与注意事项(2014-10-15)
- ·mysql 优化之COUNT(*)效率分析(2014-10-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)