gpt4 book ai didi

带有 WHERE 子句的 MySQL ORDER BY RAND() 更好吗?

转载 作者:行者123 更新时间:2023-11-28 23:51:54 27 4
gpt4 key购买 nike

我知道 ORDER BY RAND() 很慢(我用它来获取数据的随机子集)。但是我想知道如果有一个WHERE子句或者像JOIN这样的过滤函数,它会改善事情吗?我的数据库大小会随着时间的推移而增长。但是,如果我希望 WHERE 将记录数限制为 1000,ORDER BY RAND() 将仅适用于这 1000 条记录,对吗?


如果您需要更多详细信息

我所做的实际上是为幸运抽奖生成赢家。所以我想随机抽取几位获奖者。简单的例子是这样的:

SELECT * FROM luckydrawchance
WHERE luckydraw = 1
ORDER BY RAND()
LIMIT 5

但是有些用户可能中奖的几率更大,所以我在想

SELECT * FROM luckydrawchance
WHERE luckydraw = 1
ORDER BY RAND() * (-chances)
LIMIT 5

也许我需要别的东西而不是 RAND() * (-chances)(我读到它没有给出正确的概率分布)但只是给你一个想法。

最佳答案

加入其他表实际上会使事情变得更糟,因为通过 rand() 排序,MySQL 将结果复制到临时表。要复制的数据越大越复杂,查询就越慢。至于 WHERE,我无法给出绝对答案,但我希望对较小的子集进行排序比对整个表进行排序更快。在您的查询中使用 EXPLAIN 应该可以帮助您了解它是如何执行的。

关于带有 WHERE 子句的 MySQL ORDER BY RAND() 更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472394/

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