为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL:选择随机条目,但权重于某些条目

MySQL:选择随机条目,但权重于某些条目

慕雪6442864 2019-10-18 10:58:50
我有一个带有大量条目的MySQL表,以及一个名为“ Multiplier”的列。此列的默认值(也是最常见的)是0,但可以是任何数字。我需要做的是从该表中随机选择一个条目。但是,将根据“乘数”列中的数字对行进行加权。值为0表示完全不加权。值1意味着它的权重是表中条目的两倍,是它的两倍。值2表示它的权重是表中该条目的三倍,是它的三倍。我正在尝试修改开发人员已经给我的内容,所以如果设置没有任何意义,请您抱歉。我可能可以更改它,但要保留尽可能多的现有表设置。我一直在尝试找出如何使用SELECT和RAND()进行此操作,但不知道如何进行加权。可能吗?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

为了获得更好的性能(特别是在大表上),请首先为weight列建立索引并使用以下查询:


SELECT * FROM tbl WHERE id IN 

    (SELECT id FROM (SELECT id FROM tbl ORDER BY -LOG(1-RAND())/weight LIMIT x) t)

使用两个子查询,因为MySQL在第一个子查询中尚不支持LIMIT。


在40MB的表上,通常的查询在我的i7机器上花费1s,而这个查询花费0.04s。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 789 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信