ホームページ  >  記事  >  データベース  >  MySQL を使用して乱数を実装する方法 rand function_MySQL

MySQL を使用して乱数を実装する方法 rand function_MySQL

WBOY
WBOYオリジナル
2016-10-09 08:33:381131ブラウズ

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 関数が乱数を実装する方法です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。