MySQLはストアドプロシージャを使用して数百万のデータを素早く追加します。サンプルコード

MySQLはストアドプロシージャを使用して数百万のデータを素早く追加します。サンプルコード

序文

インデックスを追加した場合と追加しなかった場合の違いを反映するには、数百万のデータを使用する必要があります。ただし、数百万のデータを 1 つずつテーブルに追加すると、非常に面倒で面倒です。ここでは、ストアド プロシージャを使用してデータをすばやく追加しますが、これには約 4 時間かかります。
ユーザーテーブルを作成する

テーブル `t_sales` を作成します (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'ユーザー名',
  `password` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT 'パスワードMD5ストレージ',
  `register_time` タイムスタンプ NULL デフォルト NULL コメント '登録時間',
  `type` int(1) DEFAULT NULL COMMENT 'ユーザータイプ 1,2,3,4 ランダム',
  主キー (`id`)、
  キー `idx_username` (`username`) BTREE の使用
)

次に、データをバッチで追加するためのストアド プロシージャを作成します。

  • ユーザー名は定数と数字の組み合わせです
  • パスワードはMD5パスワードです
  • 登録時間は、現在の時間からランダムな日数先になります。
  • タイプは1~4の範囲のランダムな値です
プロシージャ salesAdd() を作成する
始める 
 i int をデフォルト 11 として宣言します。
   i <= 4000000 の間
         blog.t_salesに挿入
         (`username`,`password`,`register_time`,type) 値
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         i = i + 1 と設定します。 
   終了しながら; 
終わり

次にストアドプロシージャを呼び出します

salesAdd() を呼び出す

改良版

ストアド プロシージャを使用してデータを追加する方が、データを 1 つずつ追加するよりも便利で高速ですが、数百万のデータを追加するには数時間かかります。その後、インターネットで多くの情報を見つけ、MySQL がステートメントを実行するたびに自動的にコミットすることを発見しました。この操作は非常に時間がかかるため、自動コミットを追加および削除しました。 AUTOCOMMIT を 0 に設定します。

プロシージャ salesAdd() を作成する
始める 
 i int をデフォルトで 1 と宣言します。
 自動コミットを 0 に設定します。   
   i <= 4000000 の間
         blog.t_salesに挿入
         (`username`,`password`,`register_time`,type) 値
         (concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now()) - floor(rand() * 800000)),floor(1 + rand() * 4)); 
         i = i + 1 と設定します。 
   終了しながら;
 自動コミットを 1 に設定します。     
終わり

実行時間は387秒、つまり約6分で、その半分の時間はmd5と乱数の計算に使われます。

[SQL]
salesAdd() を呼び出します。
影響を受ける行: 0
時間: 387.691秒

これで、MySQL のストアド プロシージャを使用して数百万のデータをすばやく追加する方法に関するこの記事は終了です。MySQL で数百万のデータを追加する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 空間データストレージと関数
  • MySQLデータベースでサポートされているストレージエンジンの比較
  • MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法
  • MySQL データベースでは、datetime、bigint、timestamp を使用して時間の選択を表します。時間を保存するのに最も効率的なのはどれですか?
  • MySQL シリーズ 7 MySQL ストレージ エンジン
  • MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
  • MYSQLストアドプロシージャコメントの詳細な説明

<<:  docker compose を使ってワンクリックで分散構成センター Apollo を展開するプロセスの詳細な説明

>>:  負の距離(共感) - 相互影響の反復プロセス

推薦する

UTF8 でエンコードされた Web ページにファイルが含まれている場合の、ページの前の空白行の解決方法

<br />このページはUTF8エンコードを使用しており、ヘッダーとフッターはテンプレー...

Vue は小数点付きの星評価を実装します

この記事では、小数点付きの星評価を実装するためのVueの具体的なコードを参考までに共有します。具体的...

Vueはechart円グラフの凡例のパーセンテージを表示するメソッドを実装します

この記事では主に、echart を使用してパーセンテージを表示する Vue の円グラフデータ部分を紹...

CSS レイアウト チュートリアル: 垂直方向の中央揃えを実現する方法

序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...

Vue のミックスインの使用方法の詳細な説明

目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...

MySQL の undo、redo、binlog の違いを簡単に分析します

目次序文【ログ取り消し】 【REDOログ】 【バイナリログ】要約する序文MySQL には、REDO ...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

jsはテーブルドラッグオプションを実装します

この記事の例では、テーブルドラッグオプションを実装するためのjsの具体的なコードを参考までに共有して...

dockerでマウントされたディレクトリが読み書きできない問題を解決する

次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...

CentOS 8で自動更新を設定するための手順を完了する

データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...

NodeJs の高メモリ使用量のトラブルシューティング実戦記録

序文これは、オンライン コンテナーの拡張によって発生した調査です。最終的には、実際の OOM が原因...

Navicat は CSV データを MySQL にインポートします

この記事では、Navicatを使用してcsvデータをmysqlにインポートする方法を参考までに紹介し...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

MySQLトリガーの使用

トリガーにより、ステートメントの実行前または実行後に他の SQL コードを実行できます。トリガーは、...

Win10 + Ubuntu20.04 LTS デュアルシステムブートインターフェースの美化

エフェクト表示組み込みのブートインターフェースがあまりにも醜いので、テーマをダウンロードして美しくし...