mysql 5.6 online ddl
innodb存储引擎实现online ddl的原理是在执行创建或删除操作的同时,将DML操作日志写入到一个缓存中,待完成索引创建后再重做应用到表上,以此达到数据的一致性,这个缓存大小由参数innodb_online_alter_log_max_size控制,默认是128M,若用户更新的表比较大,并且在创建过程中 伴有大量的写事务,可能碰到这个参数空间不够用的情况。
以下几类DDL操作都可以通过在线的方式操作:
A:辅助索引的创建与删除
B:改变自增长值
C:添加或删除外键
D:列的重命名
E:添加和删除列,但是会copy table
F:改变row_format,改变key_block_size, 但是会copy table
G:添加删除列的not null default xx,default null属性, 但是会copy table
H:添加主键,虽然可以在线修改,但是会导致重新组织表,会copy table,代价非常大
I:修改表持久化统计信息选项
J:修改引擎,但是会copy table
以下几类DDL操作不能通过在线方式操作(online ddl时会阻塞DML操作):
A:修改数据列类型定义,会copy table
B:修改表或列字符集转换, 会copy table
C:删除主键, 会copy table
D:添加全文索引,不会copy table
需要特别注意的是,由于online ddl在创建索引完成后再通过重做DML操作日志来达到数据的一致性,这意味着在索引创建或删除的过程中,SQL优化器不会选择正在创建中或删除中的索引。
参考信息:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义