序文: MySQL 8.0 では高速な列追加がサポートされ、数秒で大きなテーブルにフィールドを追加できるようになったと、かなり前に聞きました。著者もローカルに 8.0 環境を持っていますが、テストはしていません。この記事では、MySQL 8.0 で列をすばやく追加する方法を説明します。 1. 背景情報を理解する テーブル構造の変更は、ビジネス運用プロセスで最も一般的な要件の 1 つです。MySQL 環境では、Alter ステートメントを使用してこれらの操作を完了できます。これらの Alter ステートメントに対応する操作は、通常、DDL 操作とも呼ばれます。一般的に、大規模なテーブルに対する DDL 操作はビジネスに大きな影響を与えるため、ビジネスがアイドル状態またはメンテナンス中に実行する必要があります。 MySQL 5.7 はオンライン DDL をサポートしています。ほとんどの DDL はテーブルの読み取りと書き込みには影響しませんが、それでも多くの時間を消費し、追加のディスク領域を占有し、マスターとスレーブ間の遅延を引き起こします。したがって、大規模なテーブルの DDL は、依然として DBA にとって頭痛の種です。 MySQL 8.0 では DBA のこの悩みが解決されると聞いたので、詳しく見てみましょう。新しい機能について学ぶ最も簡単な方法は、公式ドキュメントを参照することです。公式ドキュメントによると、Instant Add Column 機能は MySQL 8.0.12 で導入され、Tencent Games DBA チームによって提供されました。この機能は InnoDB テーブルでのみ使用できることに注意してください。 2. クイック列追加テスト クイック列追加ではインスタント アルゴリズムが使用されるため、列を追加するときにテーブル全体を再構築する必要はありません。新しい列の基本情報をテーブル メタデータに記録するだけで済みます。 alter ステートメントの後に ALGORITHM=INSTANT を追加すると、インスタント アルゴリズムが使用されます。明示的に指定されていない場合は、インスタント アルゴリズムをサポートする操作がデフォルトで使用されます。 ALGORITHM=INSTANT が指定されているがサポートされていない場合、操作はエラーで直ちに失敗します。 列の DDL 操作に関しては、instant などのアルゴリズムがサポートされているかどうか、公式ドキュメントに表が示されており、現在は次のように整理されています。アスタリスクは、すべてがサポートされているわけではなく、依存関係があることを示します。
最も広く使用されているインスタント アルゴリズムは、列を追加することです。ご覧のとおり、このアルゴリズムを使用する場合はいくつかの制限があります。制限の一部は次のとおりです。
これ以上言うよりも実際にテストしてみるのが良いでしょう。バージョン 8.0.19 を例に、実際に検証してみましょう。 # sysbench を使用して 1000 万ワットのテーブルを生成しますmysql> select version(); +-----------+ | バージョン() | +-----------+ | 8.0.19 | +-----------+ セット内の 1 行 (0.00 秒) mysql> sbtest1 から count(*) を選択します。 +----------+ | カウント(*) | +----------+ | 10000000 | +----------+ # デフォルト値のない列を追加しますmysql> alter table sbtest1 add column col1 varchar(20), algorithm=instant; クエリは正常、影響を受けた行は 0 行 (0.63 秒) レコード: 0 重複: 0 警告: 0 # デフォルト値を持つ列を追加します。 mysql> alter table sbtest1 add column create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'creation time', algorithm=instant; クエリは正常、影響を受けた行は 0 行 (0.58 秒) レコード: 0 重複: 0 警告: 0 # インスタントアルゴリズムを明示的に指定しないでください。mysql> alter table sbtest1 add column col2 varchar(20); クエリは正常、影響を受けた行は 0 行 (0.55 秒) レコード: 0 重複: 0 警告: 0 # 列のデフォルト値を設定します。mysql> alter table sbtest1 alter column col1 set default 'sql',algorithm=instant; クエリは正常、影響を受けた行は 0 行 (0.02 秒) レコード: 0 重複: 0 警告: 0 # 列を追加するためのインプレースアルゴリズムを指定します(このアルゴリズムはバージョン5.7で使用されます) mysql> テーブル sbtest1 を変更し、列 col_inplace varchar(20),algorithm=inplace; を追加します。 クエリは正常、影響を受けた行は 0 行 (1 分 23.30 秒) レコード: 0 重複: 0 警告: 0 上記のテストから、インスタント アルゴリズムを使用した列の追加は基本的に 1 秒以内に完了することがわかります。大きなテーブルの場合、この速度は非常に速く、ビジネスでは基本的に気になりません。バージョン 5.7 でインプレース アルゴリズムを使用する場合、列の追加にかかる時間は数分にまで長くなります。それに比べると、バージョン 8.0 のクイック列追加機能は実に実用的です。 要約: 列をすばやく追加するにはいくつかの制限があり、インスタント アルゴリズムは一部の DDL 操作にのみ適用されますが、8.0 のこの新機能は非常に魅力的であり、大規模なテーブルにフィールドを追加する際の問題を大幅に解決します。この記事を通じて、この新機能について理解していただければ幸いです。8.0 にアップグレードしたい場合は、正確に実行を開始できます。 上記は、MySQL 8.0 で列をすばやく追加する方法の詳細です。MySQL 8.0 で列をすばやく追加する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: JSにおける合同と不等式、等式と不等式の問題について
vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2...
ハッシュモード(デフォルト)動作原理:ウェブページのハッシュ値の変化を監視する—> onhas...
目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....
序文Linux システムの運用および保守エンジニア職の面接を受ける場合は、次の 10 個の最も一般的...
Mybatis ファジークエリ実装方法mybatis のリバース アシスタントは非常に使いやすく、通...
目次バブルソート選択ソート挿入ソート要約するバブルソートバブルソートは、シーケンスの右側から始めて、...
序文この記事では、最近私が遭遇した 2 つの状況について説明します。今後、新たな発見があれば追加して...
複数行を超えるテキストをインターセプトするための HTML コードは次のとおりです。 HTML:コー...
多くの場合、サーバーでスクリプトを定期的に実行して操作をトリガーする必要があります。たとえば、Qin...
手順: 1. MySQLデータベースをインストールする1. MySQL-5.6.17-winx64....
Centos や Ubuntu など、Docker が pull する Base イメージは最もシン...
html ¶ <html></html> html:xml ¶ <ht...
目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...
目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...
主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...