【发布时间】:2012-06-13 22:03:15
【问题描述】:
我有一个 SELECT 查询,我期望从中获得数百万个结果。我需要在 MySQL 中随机化这些结果。查询后在我的脚本中执行此操作显然会使用太多 RAM。有人可以重做这个查询,以便结果都是随机的,而不使用 rand() 的顺序吗?我看过一些示例并尝试使用它们,但它们对我不起作用,因为它们似乎都依赖于返回整个表而不是使用 WHERE 子句。这是我的查询:
SELECT * FROM pool
WHERE gender = 'f'
AND (`location` = 'united states' OR `location` = 'us' OR `location` = 'usa');
【问题讨论】:
-
你到底尝试了什么?您已经说过“尝试了一些示例”,那么它们是什么?使用 ORDER BY RAND() 有什么问题?
-
这些例子真的不适用于我的查询,所以我没有发布它们。 ORDER BY RAND() 不适用于大表。分区最终被填满,查询需要数年才能在 1000 万行表上完成。
-
ORDER BY RAND()使用巨大的表非常慢。它会生成额外的临时表,这里有更多解释:stackoverflow.com/questions/6592751/…> -
我知道不要将它用于此查询。我只是不知道我应该使用什么,因为我有这个 WHERE 子句
-
您要返回多少行?全部?
标签: mysql performance random