如何根据所有候选行的应用权重在T-SQL中随机选择一个表行?
例如,我在一个表中有一组行加权为50,25和25(最多加100但不需要),我想随机选择其中一行,其统计结果相当于各自的重量.
我建立了一个网站,我需要从数据库中选择随机加权记录.
SQL中有一段代码:随机选择一行,但要考虑权重
SELECT t.*, RAND() * t.weight AS w
FROM table t
ORDER BY w DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
它适用于小型记录样本.
当尝试接近1百万的记录时,它在我的本地机器上变慢(1.3 - 1.8秒),我想我会在更大的设备上花更长的时间.
怎么可以优化?有没有更好的方法来随机选择加权记录?
我的尝试是定期计算权重,将它们存储在单独的表中,选择随机数编程并搜索与此数字最接近的记录.