gpt4 book ai didi

mysql - 为什么我的 rand() 代码在 mysql 中不起作用?

转载 作者:行者123 更新时间:2023-11-29 12:07:41 26 4
gpt4 key购买 nike

我的userid是guid,不是int。一开始,我使用ORDER BY RAND()并且它有效。但是有人说它效率不高。所以我尝试将其更改为其他方法,但是不行,怎么解决?

-- work fine but not efficient 
select userid from user order by rand() LIMIT 1

-- do not work,always return the same row
SELECT * FROM user WHERE userid >= ((SELECT MAX(userid) FROM user)
-(SELECT MIN(userid) FROM user)) * RAND()
+ (SELECT MIN(userid) FROM _user) LIMIT 1

-- do not work,always return the same row
SELECT userid FROM user AS t1 JOIN (SELECT RAND()
* (SELECT MAX(userid) FROM user) AS id) AS t2
WHERE t1.userid >= t2.id
ORDER BY t1.userid ASC LIMIT 1;

最佳答案

您将guid视为整数。那是行不通的。问题不在于 rand(),而在于类型的滥用。

一种可以提高查询效率的方法是执行以下操作:

select userid
from user
where rand() < 0.01
order by rand()
limit 1;

这大约占用表格的 1% 并用其进行排序。您实际上可以将其形式化为:

select userid
from user cross join (select count(*) as cnt from user) params
where rand() < 100 / cnt
order by rand()
limit 1;

这将从表中选择大约 100 行并对它们进行排序。对 100 行进行排序并不是特别密集,因此从性能角度来看这应该是合理的。而且,当预期值为 100 行时,查询基本上应该永远不会无法获取至少一行。

关于mysql - 为什么我的 rand() 代码在 mysql 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com