MySQL如何安全地随机化这个查询的输出?

时间:2012-06-13 22:03:16

标签: mysql performance random

我有一个SELECT查询,我期待数百万的结果。我需要在MySQL中随机化这些结果。在查询之后在我的脚本中执行此操作显然使用了太多RAM。有人可以重做这个查询,以便结果都是随机的,而不使用rand()的顺序?我已经看到了一些示例并尝试使用它们,但它们对我不起作用,因为它们似乎都依赖于返回整个表而不是使用WHERE子句。这是我的疑问:

SELECT * FROM pool
WHERE gender = 'f'
AND (`location` = 'united states' OR `location` = 'us' OR `location` = 'usa');

2 个答案:

答案 0 :(得分:0)

如果您可以使用其他语言,例如php,您可以使用其rand()函数生成ID并将其添加到查询中,如

$ids = range($mini, $maxid);
shuffle($ids);
array_slice($ids, 0, $quantity);

或者您正在使用的任何语言类似的东西。

如果你需要在纯mysql查询中执行此操作,那么这里有一些替代方案:http://www.electrictoolbox.com/msyql-alternative-order-by-rand/

答案 1 :(得分:0)

如果你有1000万行ID,它们是否在一个连续的范围内?

  1. 通过快速选择获得所需范围内的最低ID。
  2. 获得最大的身份证。
  3. 使用php
  4. 生成此范围内的随机数
  5. 一旦你有你的数字“SELECT * FROM table1 WHERE id IN(你生成的数字)”或类似的东西