Mysql 大表在线DDL修改表全文索引解决方式

Mysql 大表在线DDL修改表全文索引解决方式

1.添加主键索引

ALTER TABLE table_name ADD PRIMARY KEY (column) ,Algorithm=Inplace ;

2.添加唯一索引

ALTER TABLE table_name ADD UNIQUE (column) ,Algorithm=Inplace ;

3.添加全文索引

ALTER TABLE table_name ADD FULLTEXT (column),Algorithm=Inplace ;

4.添加普通索引

ALTER TABLE table_name ADD KEY table_cloum(table_cloum) USING BTREE,Algorithm=Inplace ;

5.添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column1, column2, column3),Algorithm=Inplace ;

In-Place?:对应 DDL语句的 Algorithm 选项,通过 inplace 方式执行 DDL。相比表拷贝方式,可以减少空间和 I/O 消耗。
Copies Table?:对应 DDL语句的 Algorithm 选项,通过 表拷贝 方式执行 DDL。DDL 执行期间会占用更大的磁盘空间和消耗更多的 I/O。
允许并发 DML?:对应 DDL语句的 Lock 选项,DDL 执行期间是否支持并发 DML 操作。
允许并发查询?:DDL 语句执行期间是否支持并发查询操作(通常都是支持的)。
MySQL官方文档请参考: Online DDL 概览
DDL 操作执行时需要修改表的元数据(metadata),有可能会遇到等待表元数据锁的情况(waiting for table metadata lock),该情况的处理方式请参考: RDS MySQL 表上 Metadata lock 的产生和处理
Inplace 和 Copy Table 是相反的 2 种处理方式;但即使 DDL 支持 Inplace 选项,某些操作在整个执行过程中也会部分涉及到表拷贝,比如上表中的添加列操作。
2. Online DDL 建议的选项
Algorithm=Inplace :为了避免表拷贝导致的实例性能问题(空间、I/O问题),建议在 DDL 中包含该选项。如果 DDL 操作不支持 Algorithm=Inplace 方式,DDL 操作会立刻返回错误。

  • 修改字段数据类型不支持 algorithm=inplace 选项
    alter table area_bak algorithm=inplace, modify father text;1.2.
    Lock=None :为了在 DDL 操作过程中不影响业务的 DML 操作,建议在 DDL 中包含该选项。如果 DDL 操作不支持 Lock=None (允许并行 DML 操作)选项,DDL 操作会立刻返回错误。

默认情况下 MySQL 会尽量使用 algorithm=inplace , lock=none 来进行 DDL 操作。因此默认可以不指定这两个选项。
对不支持 Online DDL 的操作 可以考虑通过 Percona 的 Schema Online Change 工具来操作,请参考: RDS for MySQL 如何使用 Percona Toolkit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值