MySQL的Online DDL(在线数据定义语言)算法允许在执行表结构变更时尽量减少对表的锁定和性能影响。以下是主要的Online DDL算法:
1. ALGORITHM=INSTANT
- 最快速的算法
- 元数据操作,不需要重建表
- 仅修改表的元数据信息
- 适用于:
- 增加/删除列(不含BLOB/TEXT)
- 重命名列
- 几乎瞬间完成,对性能影响最小
2. ALGORITHM=INPLACE
- 不完全重建表
- 部分在线操作
- 支持大多数DDL操作
- 优点:
- 避免完全表重建
- 允许并发DML操作
- 适用场景:
- 添加/删除索引
- 修改列类型(部分)
- 转换存储引擎
3. ALGORITHM=COPY
- 完全表重建
- 需要复制整个表
- 性能开销最大
- 锁表时间较长
- 适用于复杂的表结构变更
4. ALGORITHM=DEFAULT
- 自动选择最优算法
- MySQL自动判断使用INSTANT/INPLACE/COPY
示例:
```sql
ALTER TABLE table_name
ADD COLUMN new_column INT,
ALGORITHM=INSTANT;
ALTER TABLE table_name
ADD INDEX idx_name(column),
ALGORITHM=INPLACE;
```
关键考虑因素:
- 表大小
- 操作类型
- 性能要求
- 并发需求
建议根据具体场景选择合适的算法。