大規模なデータテーブルのコピー効率を向上させるMySQLソリューション

大規模なデータテーブルのコピー効率を向上させるMySQLソリューション

序文

この記事では主に、MySQL で大規模なデータ テーブルのコピーの効率を向上させることに関する関連コンテンツを紹介し、参考と学習のために共有します。仕事で大規模なデータ テーブルに遭遇することはよくあります。

シナリオ: フィールドの追加や削除など、データ テーブルを変更する必要があります。これは、数万件のデータを含むデータ テーブルでは直接実行できますが、1,000 万件近くのデータを含むデータ テーブルでは実行するのは簡単ではありません。

考えられる状況:

1. データベースをクラッシュまたはフリーズさせる

2. 他のプロセスがデータベースの読み取りおよび書き込みI/Oを遅くする

3. 別の可能性としては、データ形式が不一致でデータを書き込めないということがあります(たとえば、varchar 型を int 型に変更する必要があり、データ長が大きすぎるとエラーが報告されます)。

解決: -

1. データ テーブルを再作成します。create new_table create new_table select * from old_tableこの形式は、新しいデータ テーブルをコピーするのと同じです ----(非推奨): データ テーブルのフィールドとデータのみがコピーされ、テーブル構造の主キー、インデックス、および既定値はコピーされません。

2. 2つのステップに分ける

1). create new_table create new_table like old_table

2). insert into new_table insert into new_table select * from old_table

----(データ量が少ない場合は、このソリューションを使用することをお勧めします。データ量が数百万または数千万に達すると、このソリューションは適用できません。)

拡張: データ テーブルの一部のみをコピーする場合は、 insert into new_table (field1, field2) select field1, field2 from old_table [limit n,m]; を指定できます。

3.

1). select from into outfileコマンドを使用してデータテーブルデータをエクスポートします。

2). load data infile into

では、早速図を見て、データ量が約 100 万の場合のソリューション 2 とソリューション 3 の処理速度がどの程度異なるかを見てみましょう。

>money_info から * を選択して、出力ファイル '/var/lib/mysql-files/money.txt' に格納します。 
> money_info のようなテーブル money_info_cyq11 を作成します。
>ファイル '/var/lib/mysql-files/money.txt' のデータをテーブル money_info_cyq11 にロードします。
> money_info のようなテーブル money_info_cyq22 を作成します。
> money_info_cyq22に挿入 money_infoから*を選択します。 

速度は4倍くらいで、ネットで言われている20倍の速度はまだ体験していない[顔を隠す]

注: まだ問題があります

出力ファイルディレクトリは必須です

> '%secure%' のような変数を表示します。

このコマンドを使用すると、secure_file_priv の out_file に対応するディレクトリの場所を確認し、この場所を指定してエクスポートすることができます。


要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • データファイルのコピーによる MySQL データベースの移行例
  • MySQL バックアップとリカバリのホットコピー (4)
  • MySQL の大きなデータ テーブルにフィールドを追加する方法

<<:  geo モジュールを使用して Nginx でホワイトリストを設定する例

>>:  Bootstrapはカルーセルの効果を実現します

推薦する

Linux での SSH パスワードフリーログイン設定の詳細な説明

Linux サーバー A と B が 2 台あり、一方のサーバーから SSH 経由でパスワードなしで...

UCenter ホームサイトに統計コードを追加

UCenter Homeは、ComsenzがリリースしたSNSサイト構築システムです。最新バージョン...

JavaScriptは入力ボックスコンポーネントを実装します

この記事では、入力ボックスコンポーネントを手動で実装するための具体的なコードを参考までに紹介します。...

MySQLの文字タイプは大文字と小文字を区別します

デフォルトでは、MySQLの文字タイプは大文字と小文字を区別しません。つまり、name='A...

IE9 のネイティブ ページ互換性の問題に対する解決策についての簡単な説明

序文最近、クライアントのネイティブページを引き継ぎました。顧客は、ページが IE9 以降のバージョン...

Vue エクスポート Excel 機能の全プロセス記録

目次1. フロントエンドのリーディングプロセス: 2. プラグインの使用と初期化2.1 vue-ad...

ドロップダウンリストのJavaScript実装

この記事の例では、ドロップダウンリストを実装するためのJavaScriptの具体的なコードを参考まで...

CSS カウンターとコンテンツの概要

コンテンツ プロパティは CSS 2.1 で導入され、:before および :after 疑似要素...

Win10 での MySQL 8.0.20 のインストールと設定のチュートリアル

Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...

JavaScript の差異を利用して比較ツールを実装する

序文仕事では、毎週従業員が提出した資料を数える必要がありますが、それを一つずつコピーして貼り付けるの...

ファイルのダウンロードを実現する javascript Blob オブジェクト

目次例示する1. ブロブオブジェクト2. フロントエンド3. バックエンド要約する例示する最近、ファ...

レスポンシブレイアウトについて知っておくべきこと

1. はじめにレスポンシブ Web デザインにより、Web サイトは複数のデバイスと複数の画面に同時...

docker に openjdk をインストールして jar パッケージを実行する方法

画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...

IIS を使用して X-Forwarded-For ヘッダー (XFF) を呼び出して訪問者の実際の IP を記録する 2 つの方法

問題: IIS を通じて公開された Web サイトは F5 デバイスの背後に配置されています。透過的...

React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法

目次使用インストールルーティングでどのように使用しますか?読み込み速度の比較最近、中間およびバックエ...