当前位置:首页 > 系统运维 > 正文内容

MySQL数据库如何用rand随机查询记录效率测试

a8116255316年前 (2010-05-27)系统运维15

以下的文章主要介绍的是MySQL数据库使用rand随机查询记录效率测试 ,相信如果你掌握了MySQL数据库使用rand随机查询记录效率测试的实际操作这项技术,会在以后的学习或是工作中带来很大的帮助。

一直以为MySQL随机查询几条数据,就用

SELECT * FROM `table` ORDER BY RAND() LIMIT 5  

就可以了。

但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上

查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。

You cannot use a column with RAND() values in an ORDER BY clause, 

because ORDER BY would evaluate the column multiple times. 

搜索google,网上基本上都是查询max(id) * rand()来随机获取数据。

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 5;  

但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。

上面的语句采用的是JOIN,MySQL的论坛上有人MySQL数据库使用

SELECT *   FROM `table`  WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )  ORDER BY id LIMIT 1;  

我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。

于是我把语句改写了一下。

SELECT * FROM `table`  WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))  ORDER BY id LIMIT 1;  

这下,效率又提高了,查询时间只有0.01秒

最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。

完整查询语句是:

SELECT * FROM `table`  WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))  ORDER BY id LIMIT 1;   SELECT *   FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2  WHERE t1.id >= t2.id  ORDER BY t1.id LIMIT 1;   

最后在php中对这两个语句进行分别查询10次,

前者花费时间 0.147433 秒

后者花费时间 0.015130 秒

看来采用JOIN的语法比直接在WHERE中MySQL数据库使用函数效率还要高很多。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/20699.html

分享给朋友:

“MySQL数据库如何用rand随机查询记录效率测试” 的相关文章

windows 7系统如何设置休眠时不断网以便继续完成下载

windows 7系统如何设置休眠时不断网以便继续完成下载

在Windows 7系统的默认设置中,当Windows 7系统处于休眠状态时,会同时断网的。如此一来,无论你正在使用迅雷还是快车等下载工具,同样可以在休眠状态下继续完成下载,最大限度做到从身边的小事开始支持环保。下面我们就详细介绍操作步骤,帮助Windows 7系统用户实现这一节能目标。 首先需要...

各个都很实用:windows 7系统电脑日常小技巧

各个都很实用:windows 7系统电脑日常小技巧

在使用Windows 7的时候很多用户对于系统的很多功能并不是很了解,也正是因为这样的不了解导致很多用户在使用Win 之后并不能体验Windows 7的功能便携和强大功能,导致很多用户对于Windows 7的认识还是比较模糊,不过为了让更多的朋友了解Windows 7的特点和便携应用,今天就为大家汇...

Windows7截图出现黑屏导致截的图黑呼呼一片

Windows7截图出现黑屏导致截的图黑呼呼一片

最近一些Windows 7用户反馈说,自己在截屏的时候出现黑屏,导致自己截的图黑呼呼一片。这个问题该怎么解决?今天小编就为大家提供一个解决的方法。 步骤 1 在windows xp时代,很多用户都曾被视频截图后的“全黑图片”困扰。对此,在解决本地播放时出现的截图变黑问题,一般有两个方法可以用来解...

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

Windows 7/8系统: 控制面板——自动播放——取消掉为所有媒体和设备设置自动播放 winXP系统: 开始—运行—gpedit.msc—计算机配置—管理模板—系统—关闭自动播放—已启用—所有驱动器—确定  关闭自动运行功能说明: 一旦您将媒体插入驱动器...

3个实用的windows 7 DOS操作系统技巧

3个实用的windows 7 DOS操作系统技巧

       1. 快速复制粘贴文字   有时我们需要复制命令提示符窗口中的某些文字内容,但是之前的Windows系统中常规的复制粘贴方法是无效的,而在Windows 7中我们可以通过简单方法来复制文字:首先在任意位置右击鼠标并选择“标记...

windows 7任务栏右下角小三角按钮如何显示以便隐藏更多的程序图

windows 7任务栏右下角小三角按钮如何显示以便隐藏更多的程序图

当你的Windows 7系统在后台打开多个程序时,任务栏右下角往往会出现一排的图标,不但影响美观而且也没实用性。能不能让它像WinXP那样有一个可以隐藏后台程序的小三角图标呢 当然可以,Windows 7可是继承了WinXP许多优秀的功能,而且设置方法也非常简单。 操作方法: 1、在任务栏空白处...