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 を展開するプロセスの詳細な説明

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

推薦する

Nginx の一般的な設定とテクニックの概要

序文この記事では、Nginx の一般的な、実用的で興味深い構成をいくつか紹介します。この記事を読んだ...

複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

MySQL 複数の無関係なテーブルクエリデータとページング機能要件主キーと外部キーの関連付けがない ...

フレックスレイアウトの互換性の問題の概要

1. W3C バージョンの flex 2009年版フラグ: display: box; または bo...

Vue3は現在のルーティングアドレスを取得します

正解useRouterの使用: // ルーターパス: "/user/:uid" ...

Vue3 AST パーサー - ソースコード分析

目次1. AST抽象構文木を生成する2. ASTのルートノードを作成する3. 子ノードの解析4. テ...

よく使用される MySQL 関数の完全なリスト (分類および要約)

1. 数学関数ABS(x) xの絶対値を返します。 BIN(x) xの2進値を返します(OCTは8...

Django プロジェクトを作成して MySQL に接続する方法

1: django-admin.py startproject プロジェクト名2: cd プロジェク...

Docker での Redis のマスタースレーブ構成チュートリアルの詳細説明

1. Redisイメージを取得するdocker pull redis 2. それぞれポート6379、...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

Vue の el-table は自動天井効果を実現します (固定をサポート)

目次序文実装のアイデア効果:使用:メインソースコード:序文多くのケースを見た結果、単純な観点からは、...

Vue.js で AntV X6 を使用する手順の例

目次0x0 はじめに0x1 インストール0x2 ノードサイドバー0x3 統合例0x0 はじめにプロジ...

MySQL インデックスの種類 (通常、ユニーク、フルテキスト) の説明

MySQL のインデックスの種類には、通常のインデックス、一意のインデックス、全文インデックスがあり...

MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法

1. はじめにMySQL グループ レプリケーション (略して MGR) は文字通り MySQL グ...

docker compose サービスの起動順序を制御する方法

まとめDocker-compose は複数の Docker コンテナ サービスを簡単に組み合わせるこ...

CSS画像結合技術(スプライト画像)の詳しい説明

CSS画像結合技術1. 画像のステッチ画像ステッチング技術は、個々の画像を収集する技術です。画像の多...