gpt4 book ai didi

mysql - 如何在考虑优先级系统时查询 MYSQL 表中的随机记录

转载 作者:可可西里 更新时间:2023-11-01 08:21:31 24 4
gpt4 key购买 nike

我的 table 看起来像这样

ID   | Priority
---------------
#1 | 25
#2 | 50
#3 | 125
#4 | 300
#5 | 500

对于每 1000 个查询,我希望(平均)检索 ID #1 25 次、#2 50 次、#3 125 次等。

我的表将有 1000 条记录,最终会超过 100,000 条记录,是否可以扩展它?

此查询会运行得非常频繁,因此它也需要在大型表中运行得非常快。

如果有更有效的方法,我绝对愿意重新考虑表结构 - 有什么建议吗?

最佳答案

我认为您将很难找到能够在非常大的数据集上特别好地扩展的查询。

实际上有两条路径可供您选择:

  1. 像您一样使用权重表,然后将此权重乘以每一行的随机数。
  2. 计算表中每个 ID 的记录数以反射(reflect)您的权重。例如#2 的可能性是#1 的两倍,因此#1 有 1 条记录而#2 有两条记录。如果#3 的可能性是#2 的四倍,那么它将有 8 条记录,等等。这种方法有一个非常非常大的缺点——如果#4 的可能性是#1 的一半,那么唯一的解决办法就是将数字加倍每个其他类型都有的记录,然后为 #4 插入一条记录。跟踪起来非常非常困惑。

考虑到这一点,这里有一个使用方法 1 的解决方案:

SELECT ID
FROM tablename
ORDER BY (RAND() * Priority) DESC
LIMIT 1;

(我不是 100% 确定语法,因为我是 SQL Server/Oracle 负责人,而不是 MySQL,但我认为这是正确的。)

关于mysql - 如何在考虑优先级系统时查询 MYSQL 表中的随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7155924/

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