mysql获取随机数据的一个纳闷的问题
2010-06-21 14:41
633 查看
原文:http://www.liangpeng.net/y2010/m06/mysqlhuoqusuijishujudewenti_1212.html 后期会维护
记得以前找到过方法,而且可用,忘记了,重新google,发现网上提供的方法,有些问题:
一个简单的实现如下:
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` where id>=(select rand()*(select
max(id) from `table`)) limit 10
据我测试mysql5.1
如果table有20000条数据,基本没有可能获取到一条大于1000的数据,我也搞不清楚原因,难道是我的mysql版本问题?真是奇怪了。继续测
试。
将limit 1
改为10后,结果发现,返回的数据依然不能超过1000,而且结果的id不连续,则说明mysql是逐条执行了where的rand,即执行了20000
次,这是我的估计,毕竟我不是mysql专家,不知道如何研究。即便是这样,那么每条的几率依然应该是1/20000分之一的,为何结果却出乎意料?
换了一个mysql服务器,5.1.41,结果依然如此。
记得以前找到过方法,而且可用,忘记了,重新google,发现网上提供的方法,有些问题:
一个简单的实现如下:
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` where id>=(select rand()*(select
max(id) from `table`)) limit 10
据我测试mysql5.1
如果table有20000条数据,基本没有可能获取到一条大于1000的数据,我也搞不清楚原因,难道是我的mysql版本问题?真是奇怪了。继续测
试。
将limit 1
改为10后,结果发现,返回的数据依然不能超过1000,而且结果的id不连续,则说明mysql是逐条执行了where的rand,即执行了20000
次,这是我的估计,毕竟我不是mysql专家,不知道如何研究。即便是这样,那么每条的几率依然应该是1/20000分之一的,为何结果却出乎意料?
换了一个mysql服务器,5.1.41,结果依然如此。
相关文章推荐
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- Mysql从一个表获取数据插入另外一个表[备忘]
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- 有关使用 GPS Intermediate Driver 无法获取到GPS数据的一个问题
- mysql高难度问题:随机查看数据中的记录,并且后在的不能重复前面的?
- MySQL 获取随机取数据方法及其效率
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- nodejs+express一个很经典的问题--异步获取数据模板渲染
- MySQL 随机取数据效率问题
- 使用SQL语句从数据库一个表中随机获取数据
- mysql随机获取十条数据
- 使用LEFT JOIN多次关联同一个表获取数据不正确的问题
- mysql同时向一个表中插入多条数据问题!!见详细
- MySQL随机获取一条数据
- MySQL随机获取数据的方法,支持大数据量
- 有关使用 GPS Intermediate Driver 无法获取到GPS数据的一个问题
- Oracle,Mysql 随机获取N条数据
- php中获取mysql的汉字数据时显示问号问题
- 随机获取Mysql数据表的一条或多条记录
- 使用 SQL 语句从数据库一个表中随机获取一些数据