我正在寻找一种有效的方法,从MySQL表中随机选择满足某些条件的100行,可能有数百万行.
我发现的几乎所有内容都建议避免使用ORDER BY RAND(),因为性能和可伸缩性都很差.
但是,本文建议ORDER BY RAND()仍然可以用作获取randow数据的"漂亮而快速的方法".
基于这篇文章,下面是一些示例代码,展示了我正在努力实现的目标.我的问题是:
这是一种从表中随机选择100行(或多达数百行)的有效方式,可能有数百万行吗?
性能何时成为问题?
SELECT user.*
FROM (
SELECT id
FROM user
WHERE is_active = 1
AND deleted = 0
AND expiretime > '.time().'
AND id NOT IN (10, 13, 15)
AND id NOT IN (20, 30, 50)
AND id NOT IN (103, 140, 250)
ORDER BY RAND()
LIMIT 100
)
AS random_users
STRAIGHT JOIN user
ON user.id = random_users.id
恐怕没有人能够准确地回答你的问题。如果您确实想知道,您需要针对您的系统运行一些基准测试(理想情况下不是实时基准测试,而是精确的副本)。将此解决方案与不同的解决方案进行基准测试(例如使用 PHP 获取随机行),并将数字与您/您的客户认为的“良好性能”进行比较。然后增加数据,尝试保持列值的分布尽可能接近真实值尽你所能,看看性能在哪里开始下降。说实话,如果它现在对你有用,并且有一点空间,那么我会选择它。当(如果!)它成为瓶颈时,你可以看看它再次 - 或者只是在你的数据库中添加额外的铁...
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |