Mysql DDL中的ALGORITHM

在对大表进行结构调整(如加字段、建索引)时,ALGORITHM 用于指定 Online DDL(在线数据定义) 的执行方式,这直接决定了变更期间是否会锁表以及性能如何

语法

ALTER TABLE table_name ALGORITHM = {DEFAULT | INSTANT | INPLACE | COPY}, ADD COLUMN ...

四种算法对照表

算法 (ALGORITHM)速度是否锁表(阻断写)原理与特点
INSTANT (即时)极快(毫秒级)完全不锁表仅修改元数据(Metadata)。不会动到任何实际的数据行。MySQL 8.0+ 引入,支持加/删列、修改列默认值等。
INPLACE (就地)较快不锁表(允许并发 DML 读写)在存储引擎内部(如 InnoDB)原位重建或修改表空间文件,不经过服务器层复制。期间会将新写入的数据记录在日志中,最后一次性应用。
COPY (复制)最慢会锁表(期间只能读,不能写)传统的变更方式。MySQL 会创建一张新结构的临时表,把原表数据逐行复制过去,完成后删除旧表并重命名新表。
DEFAULT (默认)自动选择视具体操作而定让 MySQL 自动选择当前操作所支持的最高效算法(优先级:INSTANT > INPLACE > COPY)。

实际应用建议

通常在生产环境操作大表时,为了防止长耗时导致业务瘫痪,建议显式指定算法。如果不确定该操作是否支持某种高性能算法,可以结合 LOCK 关键字进行测试:

-- 如果该操作不支持 INPLACE,MySQL 会直接报错,而不是默默降级为锁表的 COPY 算法
ALTER TABLE users ADD INDEX idx_status (status), ALGORITHM=INPLACE, LOCK=NONE;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值