set @a:=N+1, @b:=-1;
select * from t,
(select id from t
where if(rand()*(M - (@b:=@b+1)) < @a, @a:=@a-1, 0)
limit 10
) as tt
where t.id = tt.id;
其中M是表的行数,这比order by rand() limit N将会快很多,而且应该是均匀随机的(感觉上是,懒的去证明了)。
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`rand_rows` $$
CREATE PROCEDURE `test`.`rand_rows` (t varchar(64), id_col varchar(64), n int)
BEGIN
set @rand_rows_i:=-1;
set @rand_rows_table_count:=0;
set @rand_rows_limit:=n+1;
set @rand_rows_sql := concat('select count(*) from ', t, ' into @rand_rows_table_count');
prepare st from @rand_rows_sql;
execute st;
deallocate prepare st;
set @rand_rows_sql := concat('select * from ', t, ' as t1, ',
'(select ', id_col,' from ', t,
' where if(rand()*(', @rand_rows_table_count, ' - (@rand_rows_i:=@rand_rows_i+1)) < @rand_rows_limit, @rand_rows_limit:=@rand_rows_limit-1, 0) limit ',
@rand_rows_limit - 1, ' ) as t2 ',
'where t1.', id_col,' = t2.', id_col);
prepare st from @rand_rows_sql;
execute st;
deallocate prepare st;
set @rand_rows_sql := null, @rand_rows_i := null, @rand_rows_table_count := null, @rand_rows_limit := null;
END $$
DELIMITER ;
分享到:
相关推荐
在数据库管理中,有时我们需要从一个表中获取一定数量的随机记录,这在进行数据分析、测试、或者构建随机样本时非常有用。本话题将详细探讨如何在MySQL和SQL Server两个主流的关系型数据库管理系统中实现这一功能。 ...
然后,我们创建一个临时表 tmp_1,把符合本次活动条件的记录全部取出来: create table tmp_1 as select tmp_id.nextval as id,email,mobileno from 表名 where 条件; 找到最大的 id 号: select max(id) from ...
根据提供的代码示例,我们可以看到一种在ASP中实现记录集内随机取记录的方法: ```vb 'Moving to random record - Steven Jones' Extension If Not (记录集名称.bof And 记录集名称.eof) Then ' Reset the cursor...
这里我们将深入探讨如何在SQL中实现这一功能,以满足“SQL随机抽取N条记录”的需求。 首先,我们需要理解SQL的基本查询结构。SQL查询通常包括SELECT语句,用于指定要从数据库中检索哪些列;FROM语句,指定数据源;...
今天偶然想起来一个坑爹数据,如:PHP取百万条数据中随机20条记录,当时就用的算法。 1.先统计统计数据库多少条记录(这个做个数据缓存,如1小时重新统计一次), 2.根据总条数,随机1次,1次性取出20条记录(当然这...
case在where条件中的应用; SQL注入; 触发器的用法; 在SQL Server中使用CLR调用.NET方法;... 利用NEWID函数来取随机记录; 利用ROW_NUMBER方法分页; 在数据库中处理字符串数组; ......
这是最常见的一种方法,通过在SQL查询语句中使用`ORDER BY RAND()`来对查询结果进行随机排序,然后利用`LIMIT`限制返回的记录数量。例如,如果想要从`tablename`表中随机获取一条记录,可以使用以下代码: ```php $...
在SQL Server中,如果需要从一张表中随机抽取指定数量的数据记录,可以利用`NEWID()`函数结合`ORDER BY`子句来实现这一功能。下面将详细介绍这一过程。 #### 二、`NEWID()`函数解释 `NEWID()`函数是SQL Server中的...
‘ Moving to random record – Steven Jones’ ExtensionIf Not(记录集名称.bof and 记录集名称.eof) Then‘ reset the cursor to the beginningIf (记录集名称.CursorType > 0) Then记录集名称.MoveFirstElse记录...
在SQL SERVRE中用以下语句可随机抽出多条记录:<BR>select top 13 * from table order by newid() <P><P>但在Access中却没有newid()这个函数,那能不能用一句语句随机抽出多条记录呢?我们的xuewuyuan版主说:当然...
在传统的随机游走中,每次移动的概率只取决于当前节点的邻居。然而,重启随机游走增加了“重启”概率,即在每个时间步,有一定概率直接返回到起始节点。这个重启概率通常用参数 \( p \) 表示,\( p \) 越大,越容易...
(1) 随机取1个128位数A。 (2) 将A与CRC-16做除法得余数B,A*216+B保存在C中。 (3) 随机修改C中的1个比特,重新与CRC-16做除法运算,记录余数为0的二进制组合。 (4) 随机修改C中的2个比特,重新与CRC-16做除...
从数据库中随机取记录的基本思路是通过添加一个随机排序字段来打乱记录的顺序,然后通过限制查询结果的数量来获取指定数量的记录。 #### 2. SQL通用方法 在大多数关系型数据库中,可以通过以下SQL语句实现: ```...
在ASP(Active Server Pages)开发中,经常需要从数据库中获取特定数量的随机记录,用于实现如轮播图、推荐内容等随机展示的功能。本文将详细介绍如何在ASP环境下,针对SQL Server(MSSQL)和Access数据库分别实现...
在给定的标题“JAVA主键随机+SELECT联动+数据库随机取数+F5刷新+字符编码乱码”中,我们可以分解出以下几个关键知识点: 1. **Java主键随机生成**:在Java中,可以使用`java.util.Random`类或`java.security....
这里我是直接使用mysql rand by函数来直接,几千条记录没关系,但如果到了几万条感觉要几秒,这个就很慢了,下面小编与大家一起来看看mysql 取随机数据慢优化过程。MySQL很多时候需要获取随机数据,举个例子,要从...