序文: 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における合同と不等式、等式と不等式の問題について
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
概要インデックスは、テーブル内の 1 つ以上の列に基づいて DBMS によって特定の順序で作成される...
この記事では、Excelテーブルプラグインを導入するVueの具体的なコードを参考までに共有します。具...
1. MacにMySQLデータベースをインストールする1. MySQLデータベースをダウンロードする...
擬似要素と擬似クラスところで、まずは疑似クラスセレクターと疑似要素セレクターについておさらいしておき...
>1 データベースを起動するcmd コマンド ウィンドウで、「sqlplus」を直接入力して ...
仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...
目次序文1. アプリケーションコンポーネント2. アプリケーションの種類3. アプリケーションサービ...
以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...
1. 環境整備1.1 基本環境NTP設定: 省略 #時間の一貫性を確保するためにNTPサービスを設定...
1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...
3 つの属性 flex-grow、flex-shrink、flex-basis の機能は次のとおりで...
序文「データベース トランザクションの特徴は何ですか?」と尋ねられたら、 ACID 特性である原子性...
この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...