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;
```
關鍵考慮因素:
- 表大小
- 操作類型
- 性能要求
- 并發需求
建議根據具體場景選擇合適的算法。