作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 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/
我是一名优秀的程序员,十分优秀!