MySQLループは数千万のデータを挿入する

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する

テーブル `mysql_genarate` を作成します (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `uuid` varchar(50) デフォルト NULL,
 主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5999001 デフォルト CHARSET=utf8;

2. ループ挿入用のストアドプロシージャを作成する

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_two1`()
  始める 
  i INT DEFAULT 0 を宣言します。
  i < 3000 ですが
    mysql_genarate ( uuid ) VALUES( UUID() ) に挿入します。
    i = i + 1 を設定します。
  終了しながら;
終わり

テストcall test_two1()を呼び出すと、10,000 個のデータをテストするのに数分かかります。数千万個のデータの場合、この速度は耐えられないでしょう。

3. ストアドプロシージャを最適化する

バッチ挿入SQL文を使用する

CREATE DEFINER=`root`@`localhost` PROCEDURE `insertPro`( IN sum INT )
  始める
  count INT DEFAULT 0 を宣言します。
  i INT DEFAULT 0 を宣言します。
  SET @exesql = concat( "mysql_genarate(uuid) の値に挿入" );
  @exedata を "" に設定します。
  カウントを 0 に設定します。
  i = 0 に設定します。
  count < sum の場合、DO
    @exedata を連結して設定します( @exedata, ",(UUID())" );
    カウントをカウント + 1 に設定します。
    i = i + 1 を設定します。
    i % 1000 = 0 の場合
      @exedata を SUBSTRING( @exedata, 2 ) に設定します。
      SET @exesql = concat( "mysql_genarate(uuid) の値に挿入", @exedata );
      @exesql からステートメントを準備します。
      ステートメントの実行;
      DEALLOCATE PREPARE ステートメント;
      @exedata を "" に設定します。
    終了の場合;
  終了しながら;
  長さ(@exedata) > 0の場合
    @exedata を SUBSTRING( @exedata, 2 ) に設定します。
    SET @exesql = concat( "mysql_genarate(uuid) の値に挿入", @exedata );
    @exesql からステートメントを準備します。
    ステートメントの実行;
    DEALLOCATE PREPARE ステートメント;
  終了の場合;
終わり

insertPro(10000) の呼び出しには数十分の一秒かかりますが、これは許容範囲内です。

以上が数千万件のデータのMySQLループ挿入の詳細です。MySQLループ挿入の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • .Net Core を使用して数千万のデータを MySQL にインポートする手順
  • .Net Core は数千万のデータを MySQL データベースにインポートします
  • MySQLデータベースの数千万件のデータクエリとストレージの詳細な説明
  • インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する
  • 数千万のMySQLデータ量を素早くページ分割する方法
  • 数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する
  • 数千万のデータを含む MySQL テーブルを最適化するにはどうすればよいでしょうか?
  • 単一の MySQL テーブルで数千万のデータを処理するアイデアを共有する

<<:  Linux bzip2 コマンドの使用

>>:  IDEA の Docker プラグインを介して Springboot プロジェクトを公開する方法の詳細なチュートリアル

推薦する

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

Linux システムで IPv6 をサポートするように Nginx を設定する方法

1. 既存のnginxがipv6をサポートしているかどうかを確認する既存の nginx が ipv6...

Vue2.x および Vue3.x のカスタム命令の使用方法とフック関数の原理を理解する

目次Vue2.x の使用法グローバル登録部分登録使用フック機能フック関数のパラメータVue3.x の...

MySQL innodb_autoinc_lock_mode について

innodb_autoinc_lock_mode パラメータは、auto_increment 列を持...

Linux で g++ を使用してプログラムをコンパイルする際の -I (大文字の i)、-L (大文字の l)、-l (小文字の l) の機能の詳細な説明

初心者の Linux ユーザーとして、私は単純なgcc/g++操作を何度も使用してきましたが、少し複...

VueのSSRサーバーサイドレンダリング例の詳細な説明

サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...

Nginx ポート競合を解決するトラブルシューティング方法の例

問題の説明データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring...

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...

JavaScript イベント委任 (プロキシ) の使用例の詳細

目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...

Windows 10 Home Edition に Docker for Windows をインストールする

0. 背景ハードウェア: Xiaomi Notebook Air 13/Inter Core i7-...

Vue3+TypeScriptはaxiosをカプセル化し、リクエスト呼び出しを実装します

まさか、2021年になってもTypeScriptについて聞いたことがない人がいるなんて?プロジェクト...

画像をハイパーリンクとして使用したときに表示される青いボックスを削除する方法

最近、Dreamweaver を使用して製品プレゼンテーションを作成し、画像にハイパーリンクを追加し...

Vueで複数の添付ファイルをアップロードする実装例

目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...

SQLデータベースの14の事例の紹介

データシート /* Navicat SQLite データ転送 ソースサーバー: school ソース...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...