ホームページ  >  記事  >  データベース  >  mysql_MySQL にランダムな文字列データを挿入する方法

mysql_MySQL にランダムな文字列データを挿入する方法

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

アプリケーションシナリオ:
場合によっては、テストのためにデータベースに挿入されたレコードをテストする必要があるため、これらのスクリプトを使用することが非常に重要です。

テーブルの作成:

リーリー

ランダムな文字列を生成する関数を作成します:

リーリー

x から始まるテーブルを挿入するプロシージャを作成します。 y は終了値、z は生成される乱数の数です

リーリー

mysqlのランダムデータの生成と挿入

dblp データベースには引用情報がほとんどなく、論文あたりの引用数は平均 0.2 です。実験データセットとして dblp を使用した論文では、引用情報をランダムに追加できると述べられています。これに触発されて、各論文に 20 件のランダムな引用を追加する予定だったので、次の SQL ステートメントを書きました。

String sql = "引用(pId1,pId2) 値に挿入((論文制限から pId を選択 ?,1),(論文制限から pId を選択 ?,1))";

プリペアドステートメントを使用してデータベースをバッチモードで送信します。

最初のパラメータは、0 から N までのペーパーの ROWID 情報です (N はペーパーの合計行です)。 2 番目のパラメーターは、Java によって生成された 0 ~ N の範囲の 20 個の非反復乱数です。次に、for ループにネストされ、10,000 個のデータごとにデータベースに送信されます。

このコードは制限機能を巧みに使用してタプルをランダムに選択しており、密かに満足しています。すべての選択はデータベースによって行われるため、jdbc を介した複数の接続の必要がなく、すぐに完了できるはずだと思いました。予想外なことに、わずか 100,000 個のデータ (10000*10) を挿入するのに 22 分もかかりました。最後の実験では 400 万個のデータを挿入する必要があるため、約 14 時間かかります。

そこで、時間のボトルネックを見つけるために同様のプログラムを書き続け、最終的にこの操作は非常に時間がかかります。最初に制限を選択する理由は、数値がランダムに生成され、その数値をタプル、つまり ROWID にマップする必要があるためです。papers テーブルの主キーは増加する int ではないため、デフォルトの ROWID は存在しません。 。その後、auto_increment の一時列をpapers テーブルに追加し、引用の挿入が完了したら削除できるのではないかと考えました。このようにして、SQL ステートメントは次のように変更されます:

String sql = "引用(pId1,pId2)に挿入値((temp=?の論文からpIdを選択), (temp=?の論文からpIdを選択))";

100,000 個のデータを再度挿入します。これには 38 秒かかります。効率は大幅に改善されましたが、さらに最適化できるかどうかはわかりません。

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