mysql 条件 随机查询数据_求指点带where条件的mysql随机查询n条记录的高效方法

搜索了mysql随机查询,都是没有带where条件的,直接硬套的话limit获取到的记录个数不确定就需要一个while循环知道获取到需要的记录数,加了while循环的效率当然是很低很低的。也试了从数据库直接拿全部满足where条件的记录,再在java里面随机拿若干个,这也肯定是不合理的,效率跟记录总数有关跟所需记录无关,效率也非常低。求高手指点解决方法

解决方案

15

SELECT * FROM table

WHERE id >= (

(SELECT MAX(id) FROM table WHERE xxx = “xxx”)-

(SELECT MIN(id) FROM table WHERE xxx= “xxx”)

) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= “xxx”)

LIMIT n    满足where条件的随机数 取n条数据  试试题主

10

先看 where 后符合条件的有多少条,然后再讨论。

15

测试表,仅主键

CREATE TABLE `test` (

`sss` varchar(20) NOT NULL,

PRIMARY KEY (`sss`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

生成100W数据

CREATE  PROCEDURE `aa`()

BEGIN

DECLARE i int;

DECLARE c int;

set i = 0;

set autocommit = 0;

while i 

set c = 0;

while c 

insert into test VALUES( LPAD(i*1000+c,10,"0"));

set c=c+1;

end while;

commit;

set i=i+1;

end while;

set autocommit = 1;

END

查询

select * from test WHERE sss > "0000100023" and sss 

耗时0.12S, 服务器是阿里云RDS最低配置。

ORDER BY rand() LIMIT N会慢吗?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指点带where条件的mysql随机查询n条记录的高效方法!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值