-1

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

我目前这样做(伪):

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']
}

但这需要很长时间。

如果我只是执行 'update table set order = rand()' 会有重复,我不想order有重复(但它没有设置为 UNIQUE 索引,因为它在更新时会有重复。

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

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

(mysql 5)

4

3 回答 3

1

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

于 2012-10-26T16:00:08.573 回答
1

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

于 2012-10-26T16:00:32.330 回答
0

如何创建另一个表 - my_wierd_sort_table。

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

于 2012-10-26T15:57:04.020 回答