如何最好每小时重新排序100k数据库行?

时间:2012-10-26 15:49:56

标签: php mysql

Mysql - 我想每小时重新排序一个100k行数据库。我有一个名为'order'的字段,我按顺序排序。我怎么能最好地重新排序呢?

我目前这样做(伪):

mainpage.php : select * from table order by `order` desc limit 100;

和每小时:

cronjob.php  : select * from table order by rand(); 
$i=0;
foreach($row) {
$i++;
update table set order = $i where id = $row['id']
}

但需要很长时间。

如果我只是'更新表集order = rand()'那么会有重复项,我不希望order有重复项(但它没有设置为UNIQUE索引,因为它是更新将有重复。

最好的办法是什么?

(我这样做是因为只是通过rand()限制100“从表格顺序中选择*”真的很慢,但是在索引上使用它会快得多。它只需要很长时间才能重新排序) / p>

(mysql 5)

3 个答案:

答案 0 :(得分:1)

为什么不使用自动增量字段,然后生成一个随机值列表(在最小和最大存储之间),以便在选择时使用?

答案 1 :(得分:1)

MySQL无论如何都不是磁盘顺序存储。这对你没有任何帮助。这样做可能会使行按照特定顺序显示在管理客户端中,但实际上并不会对任何内容添加任何速度。请在您的select语句中添加ORDER BY子句。

答案 2 :(得分:0)

如何创建另一个表 - my_wierd_sort_table。

然后完全删除它,并插入PK和你的rand()列 - 并在你的选择中使用它来排序......