mysql不用rand()函数实现随机读取数据库记录的方法

mysql教程不用rand()函数实现随机读取数据库教程记录的方法
,以及google了一下相关的文件,发现大家几乎清一色使用 order by rand() 来达到该目的,但是实际上存在非常严重的性能问题。
如果你的数据库里只有几百条,且调用次数又不多的情况下,你爱用啥方法就用啥方法。
但如果你有10万或100万或更多条数据的话,那么每次执行带 order by rand() 的 sql 语句的时候,mysql服务器需要计算出10万或100万或更多个随机数,可想而知对数据库服务器的资源浪费有多大。

我建议大家使用以下方法之一:

第一种:count + limit

1、select count(*) from table_name // 获取到数据库总记录 $count
    2、$randoffset = rand(0, $count-1);
    3、select * from table_name limit $randoffset,1第二种:maxid

1、select max(id) from table_name // 获取数据库主键字段的最大值 $maxid
    2、$randid = rand(0, $maxid);
    3、select * from table_name where id>=$randid limit 1
    如果能确保id是连续的,甚至可以直接算出一组 $randid,然后用 where id in ($randid_1, $randid_2, ...),批量提取数据
    如果id不是连续的,可以使用多算一些随机数,然后 where id in ($randid_1, $randid_2, ... $randid_100) limit 10,虽然我为了提取10条记录计算了100个随机数,但总比用 order by rand() 需要算几万几十万几百万个随机数划算的多吧。

时间: 2024-09-21 01:12:18

mysql不用rand()函数实现随机读取数据库记录的方法的相关文章

ASP+Access随机读取数据库记录的方法

ASP&Access随机读取某段数据 在网上也搜索了很多,分享下我的方法... 以下是源代码:Randomize(Timer()) SQL = "SELECT TOP 100 ID FROM table1 ORDER BY Rnd(-(ID + " & Int((10000 * Rnd) + 1) & "))" Set RS = Server.CreateObject("ADODB.RecordSet") RS.Open 

简单高效:不重复随机读取数据库记录

数据|数据库|随机|重复 看到经常有人问这个问题.又到网上找了些看,觉得写得不满意.大多读取记录到数组里去抽取.昨天又看到人写,心血来潮就顺手想了个,个人认为这种方法应该错吧,呵呵.刚好20行-_-实现方法:1.通过recordset游标可移动的特性,在已打开记录集里移动到随机位置读取记录.而且可以将就使用页面中已打开的RS对象.2.将出现过的随机数保存到一个字符串中,通过instr函数来检查是否重复,重复则递归调用函数至不重复. 数据库打开查询若干,省略... ...Set rs = Serv

ASP.NET随机显示数据库记录

asp.net|数据|数据库|随机|显示 System名称空间有一个Random类,用来产生随机数.本文就介绍利用这个Random类来随机显示数据库记录.     Random类有一个重载方法叫Next,它可以产生随机数,它允许输入两个参数,以产生这两个数之间的随机数.例如:      Random R = new Random();   Random.Next(1,100);       将会在产生1-100之间的随机数.      要随机显示数据库记录,需要知道数据库最大记录数和最小记录数.

JAVA频繁访问oracle数据库获取记录(间隔1秒就读取数据库记录或修改数据库记录),如何操作

问题描述 JAVA频繁访问oracle数据库获取记录(间隔1秒就读取数据库记录或修改数据库记录),使用什么连接方式最好(高效)??,用jdbc连接池好吗?,怎么使用jdbc连接池后释放资源而不关闭连接呢??,谢谢各位了!!

MySQL中rand函数随机取数据介绍

 代码如下 复制代码 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值.  代码如下 复制代码 mysql> select RAND();         -> 0.5925 mysql> select RAND(20);         -> 0.1811 mysql> select RA

asp 随机读取ACCESS数据库记录的方法

检查了一些贴子对于MSSQL数据库教程一般可以采用这样的语句: 方法三:有这样一种方法,我觉的不错: <% yourstr="*1*3*4*6*12*...." sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0" %> yourstr可以生成随机数多一点大于所限定抽取的随机数为好,这样可以排除记

MySQL使用rand函数实现随机数

sql 的随机函数newID()和RAND() sql server的随机函数newID()和RAND() SELECT * FROM Northwind..Orders ORDER BY NEWID() --随机排序 SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID() --从Orders表中随机取出10条记录 示例 A.对变量使用 NEWID 函数 以下示例使用 NEWID() 对声明为 uniqueidentifier 数据类型的变

ASP实现随机提取数据库记录例程

数据|数据库|随机 <%"一个从数据库中随机读取纪录的例子  Set Rs1=server.CreateObject ("adodb.recordset")  Set Rs=server.CreateObject ("ADODB.RECORDSET")  SQL="Select id from Article order by id desc"  rs.Open sql,dataconn,3,3  If not rs.EOF th

用ASP.NET2.0如何随机读取Access记录?

access|asp.net|随机 由于使用ADO访问Access数据库会有缓存,这在随机提取数据库数据时,例如:sql="select top 10 Title,objectGuid from Document Order By Rnd(id)",将得不到随机记录,下面的例子可以克服这一缺陷,实现数据库的随机读取. C#: <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//