---
title: "Instant ADD COLUMN – MariaDB Server 10.3 新機能"
publish_date: 2019-01-22
updated_date: 2023-10-12
author: "MariaDB"
tags:
  - name: "MariaDB Server"
    url: "/ja/resources/blog/tag/mariadb-server-ja.md"
---

# Instant ADD COLUMN – MariaDB Server 10.3 新機能

MariaDB Server 10.3.2 以降，[Instant ADD COLUMN](https://staging-mdb.com/kb/en/library/instant-add-column-for-innodb/) が追加されており，大規模なテーブルに対しても新たなカラム(column)の追加を非常に高速に行うことが可能になっています。  
また，現在ベータ版の MariaDB Server 10.4 では [Instant DROP COLUMN](https://staging-mdb.com/kb/en/library/alter-table/#drop-column) も追加されています。  
本投稿では，Instant ADD/DROP COLUMN について解説致します。

### Instant ADD COLUMN

Instant ADD COLUMN は2017年4月に MariaDB Corporation，Alibaba，Tencent の開発者の間で初期デザインが議論され. Tencent Games DBA チームの陈福荣様により，プロトタイプが開発されました。

[Instant ADD COLUMN for InnoDB – Marko Mäkelä](https://staging-mdb.com/resources/blog/instant-add-column-for-innodb/)

その後 MariaDB Corporation により再実装され，[MariaDB Server 10.3.7](https://staging-mdb.com/kb/en/library/mariadb-1037-release-notes/) で GA となりました。

###### 制限事項

現状以下の機能上の制限があります。

- 追加したカラムは最後列に追加される
- [FULLTEXT INDEX](https://staging-mdb.com/kb/en/full-text-indexes/) が利用されている場合，Instant ADD COLUMN は利用不可
- [ROW\_FORMAT=COMPRESSED](https://staging-mdb.com/kb/en/xtradbinnodb-storage-formats/#compressed) が利用されている場合，Instant ADD COLUMN は利用不可

###### 利用方法

Instant ADD COLUMN は以下のように利用することが可能です。

```
alter table t1 add column note varchar(50) algorithm=instant;

```

Reference: <https://staging-mdb.com/kb/en/library/alter-table/#algorithm>

サンプルテーブルを作成，比較的大量のデータをインポートし，Instant ADD COLUMN の実行時間を測定してみます。

###### サンプルテーブル作成，テストデータインポート

```
create table t1 (id int primary key) engine=innodb;
mysqlimport test t1.csv

```

ここで，サンプルデータ t1.csv には 1億行のデータがあります。

###### カラム追加テスト

note という名前で varchar(50) のカラムを追加してみます。

```
MariaDB [test]> alter table t1 add column note varchar(50), algorithm=instant;
Query OK, 0 rows affected (0.002 sec)
Records: 0  Duplicates: 0  Warnings: 0

```

わずか 0.002 秒でカラム追加を行うことができました。比較として ALGORITHM=COPY で実施してみます。

```
MariaDB [test]> alter table t1 add column (note varchar(50)), algorithm=copy;
Query OK, 100000000 rows affected (4 min 54.706 sec)
Records: 100000000  Duplicates: 0  Warnings: 0

```

ALGORITHM=COPY ではほぼ 5分かかりました。  
ALTER TABLE 実行中は SELECT 以外のクエリが実行できませんので，大規模なテーブルの場合，サービス提供に支障をきたす場合があると想像されます。

### Instant DROP COLUMN

今度は反対に追加したカラムを削除(DROP)してみます(開発版の10.4が必要になります)。

```
MariaDB [test]> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| note  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.001 sec)

MariaDB [test]> alter table t1 drop column note, algorithm=instant;
Query OK, 0 rows affected (0.002 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [test]> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.001 sec)

```

DROP COLUMN も非常に高速であることが確認できました。なお，インデックスが定義されているカラムでは ALGORITHM=INSTANT は適用できません。

[ALTER TABLE – DROP COLUMN](https://staging-mdb.com/kb/en/library/alter-table/#drop-column)

### まとめ

今回はMariaDB Server 10.3 以降デフォルトとなる ALTER TABLE .. \[ADD|DROP\] COLUMN .. ALGORITHM=INSTANT では，非常に高速なスキーマ変更が可能となることが確認できました。これによりMariaDB Serverを運用する上で，非常に高い柔軟性が得られるものと考えます。