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)
答案 0 :(得分:1)
为什么不使用自动增量字段,然后生成一个随机值列表(在最小和最大存储之间),以便在选择时使用?
答案 1 :(得分:1)
MySQL无论如何都不是磁盘顺序存储。这对你没有任何帮助。这样做可能会使行按照特定顺序显示在管理客户端中,但实际上并不会对任何内容添加任何速度。请在您的select语句中添加ORDER BY
子句。
答案 2 :(得分:0)
如何创建另一个表 - my_wierd_sort_table。
然后完全删除它,并插入PK和你的rand()列 - 并在你的选择中使用它来排序......