MYSQL データベースをテストする必要があります。数万のデータを含むデータベースがあります。一度に 1 つの情報を更新するループを作成するにはどうすればよいですか?一回の更新が 100 個のデータの場合、 WHILE で書き込むだけで十分であることがわかります。正しい答えは、MySQL の rand 関数を使用することです: UPDATE cdb_posts SET views = rand(); ちなみに、次のような mysql rand 関数の例をいくつか紹介します。 ()、フィールドに注意してください 幅は十分ですか? mysql はいくつかのデータをランダムにクエリするので、 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 を使用してください
それでおしまい。
しかし、実際にテストしてみると、これは非常に非効率であることがわかりました。 15万件を超えるデータベースの場合、5件のデータをクエリするのに8秒以上かかります。また、ORDER BY句でrand()が複数回実行されるとも言われており、当然非常に時間がかかります。非効率的な。 .
Google を検索し、基本的にインターネット上で max(id) * rand() をクエリしてデータをランダムに取得します。
リーリー
ただし、これにより 5 つの連続レコードが生成されます。解決策は、一度に 1 つのクエリを 5 回実行することだけです。それでも、150,000 のエントリを含むテーブルのクエリにかかる時間はわずか 0.01 秒未満であるため、それだけの価値があります。上記のステートメントでは JOIN が使用されており、mysql フォーラムの誰かがそれを使用しています
リーリー
テストしてみたところ、0.5秒かかり、速度は良好ですが、上記の記述とはまだ大きなギャップがあります。いつも何かが普通ではないように感じます。そこで文を書き直しました。
リーリー
今度は効率が再び向上し、クエリ時間はわずか 0.01 秒になりました。最後にステートメントを改善し、MIN(id) の判定を追加します。最初にテストしたとき、MIN(id) 判定を追加しなかったため、テーブルの最初の数行が常に半分の時間でクエリされていました。
完全なクエリ ステートメントは次のとおりです:
リーリー
最後に、php でこれら 2 つのステートメントを 10 回クエリします。
前者は0.147433秒かかります
後者の時間は 0.015130 秒かかります
上記は、MySQL rand 関数が乱数を実装する方法です。