在表格中随机排列元素的最佳方法

时间:2011-04-17 00:00:58

标签: php mysql

我有30万行的表。此表中有专门的专用字段(称为order_number)来编号,后来用于显示order_number字段排序的此表中的数据。为每个记录分配随机数/哈希以选择按此数字排序的记录的最佳和简单方法是什么?表中的行数不稳定,可能会增加到1 000 000,因此rand方法应将其纳入帐户。

4 个答案:

答案 0 :(得分:1)

Look at this tutorial从表格中选择随机行。

答案 1 :(得分:1)

如果您不想使用MySQL的内置RAND()功能,可以使用以下内容:

select max(id) from table;
$random_number = ...
select * from table where id > $random_number;

这应该快得多。

答案 2 :(得分:1)

UPDATE table SET order_number = sha2(id)

 UPDATE table SET order_number = RAND(id)

sha2()比RAND()更随机。

答案 3 :(得分:0)

我知道你已经得到了足够的答案,但我会告诉你我们是如何在公司里做到的。

我们使用的第一种方法是使用附加列来存储为每个记录/行生成的随机数。我们在此专栏上有INDEX,允许我们通过它订购记录。

id, name   , ordering
1 , zlovic , 14
2 , silvas , 8
3 , jouzel , 59

SELECT * FROM table ORDER BY ordering ASC/DESC

POS:你有索引和订购非常快 缺点:您将依赖新记录来保持记录的随机化

我们使用的第二种方法是Karl Roos给出了他的答案。我们检索数据库中的记录数并使用> (更大)和一些数学我们随机检索行。我们正在使用二进制ID,因此我们需要保留自动增量列以避免InnoDB中的随机写入,有时我们执行两个或更多查询来检索所有数据,使其保持足够的随机性。 (如果您需要1,000,000条记录中的30个随机项目,则可以为10个不同偏移的项目分别运行3个简单SELECT

希望这会对你有所帮助。 :)