百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql rand()随机取出记录的优化
分享文章到:

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

发布时间:01/15 来源: 浏览: 关键词:
在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

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有5人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板