关于 php:如何最好地每小时重新排序 100k 数据库行?

How to best reorder 100k database rows every hour?

Mysql - 我想每小时重新排序一个 100k 行的数据库。我有一个名为"订单"的字段,我按此排序。我怎样才能最好地重新排序?

我目前正在这样做(伪):

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

和每小时:

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

但这需要很长时间。

如果我只是执行 'update table set order = rand()' 会有重复,我不希望 order 有重复(但它没有设置为唯一索引,因为它正在那里更新将是重复的。

这样做最好的方法是什么?

(我这样做是因为只执行"select * from table order by rand() limit 100"真的很慢,但是将它放在索引上要快得多。重新排序只需要很长时间)

(mysql 5)


无论如何,MySQL 都不是磁盘上的顺序存储。这不会给你任何东西。这样做可能会使行以特定顺序显示在您的管理客户端中,但实际上不会增加??任何速度。请在您的选择语句中添加一个 ORDER BY 子句。


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


如何创建另一个表 - my_wierd_sort_table。

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