-1

Mysql - 1 時間ごとに 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」を実行するだけでは非常に遅かったため、この方法で行いますが、インデックス上に置く方がはるかに高速です。並べ替えにはかなりの時間がかかります)

(mysql5)

4

3 に答える 3

1

自動インクリメント フィールドを使用してから、選択時に使用するランダム値のリスト (格納されている最小値と最大値の間) を生成してみませんか?

于 2012-10-26T16:00:08.573 に答える
1

いずれにせよ、MySQL はディスク上のシーケンシャル ストレージではありません。これでは何も得られません。これを行うと、管理クライアントに特定の順序で行が表示される場合がありますが、実際には何の速度も向上しません。ORDER BYselectステートメントに句を追加してください。

于 2012-10-26T16:00:32.330 に答える
0

my_wierd_sort_table という別のテーブルを作成するのはどうですか。

次に、それを完全に削除し、PK と rand() 列を挿入します。それを使用して、selects で並べ替えます...

于 2012-10-26T15:57:04.020 に答える