大規模なデータテーブルのコピー効率を向上させる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はカルーセルの効果を実現します

推薦する

HTML でスクロールバーを非表示にしたり削除したりする方法

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

docker-compose を使用して Apollo カスタム環境をデプロイする詳細なチュートリアル

目次アポロ コンフィギュレーション センターとは何ですか?アポロの特徴クライアントアーキテクチャアー...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

MySQL複合クエリの詳細な説明

UNIONの使用ほとんどの SQL クエリは、1 つ以上のテーブルからデータを返す単一の SELEC...

21 の MySQL 標準化および最適化のベスト プラクティス!

序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...

HTML でフォーム入力やその他のテキスト ボックスを読み取り専用にして編集不可にする方法

場合によっては、フォーム内のテキスト ボックスを読み取り専用にして、ユーザーがその中の情報を変更でき...

Vue の新しいおもちゃ VueUse の具体的な使い方

目次序文VueUseとは使いやすいおなじみの手ぶれ補正やスロットル機能もありますグローバル状態を共有...

jQueryで劇場の座席選択と予約の効果を実現

jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...

MySQL ストレージエンジン InnoDB の設定と使用方法の説明

MyISAM と InnoDB は、MySQL で最も一般的なストレージ エンジンです。前回の記事で...

axiosリクエストをvueでカプセル化する方法

実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...

Ubuntu 16.04 mysql5.7.17 リモートポート 3306 を開く

MySQLへのリモートアクセスを有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

HTML テーブルの空白セル補完を実装する方法

私が初めて Web 開発を独学で学んだ頃は、いわゆる DIV/CSS レイアウトはなく、テーブル レ...

MySQLクエリのパフォーマンスに影響を与える大きなオフセットの理由と最適化の詳細な説明

序文MySQL クエリは select コマンドを使用し、limit および offset パラメー...