Mysql DDL中的ALGORITHM

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

语法

sql 复制代码
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 关键字进行测试:

sql 复制代码
-- 如果该操作不支持 INPLACE,MySQL 会直接报错,而不是默默降级为锁表的 COPY 算法
ALTER TABLE users ADD INDEX idx_status (status), ALGORITHM=INPLACE, LOCK=NONE;
相关推荐
码出钞能力31 分钟前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦1 小时前
数据库第二次作业
数据库
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6682 小时前
Cursor-superpowers插件用法
数据库·人工智能
NWU_白杨2 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
一嘴一个橘子2 小时前
MySqL 的 B+树、 叶子节点、非叶子节点
mysql
麦聪聊数据2 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
脱胎换骨-军哥3 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树