Alter Table 操作遇见的坑
Alter Table 操作执行过程
最近在公司发版的时候翻车了,在上线前加到现在没有执行完发版前的sql,一看原来是Alter table 操作,这就不奇怪了,mysql的ALTER TABLE 操作的性能对大表而言是一个大问题
,其中在执行ALTER TABLE的操作步骤的过程,大部分都是
- 用新的结构创建一张空表
- 从旧表查出所有数据插入到新表中
- 然后删除旧表
这样操作很消耗时间,如果内存不足够的情况下数据量又很多,而且还有很多索引,这个操作将消耗数小时甚至数天才能完成
ALTER TABLE 中的列操作差别
ALTER TABLE 允许使用 ALTER COLUMN ,MODIFY COLUMN 和 CHANGE COLUMN 语句来进行修改列,但是这3种操作都是不一样的,如给一列修改默认值(基于mysql5.7)
-
MODIFY COLUMN
modify的时候是拷贝了整张表数据到了新表里面,所有的MODIFY 操作都将导致表的重建
-
ALTER COLUMN
列的默认值信息实际上是存储在
.frm
文件中的,alter 只针对其.frm
文件进行修改,修改默认值的时候不会涉及到表数据改动,也就不会重建表 -
CHANGE COLUMN
change操作与modify操作比较像,除了modify操作不能重命名列名,所以这种操作也会导致重建表
总结
ALTER TABLE操作是很让人痛苦的,大部分情况下进行ALTER TABLE还会锁表,并重建整张表,所以目前一般做法
- 使用
Online DDL
对表修改 - 在建表时具有良好的前瞻性,并保留相关字段
- 新建同名表,然后进行数据同步,再rename
__EOF__

本文作者:我在清水河边
本文链接:https://www.cnblogs.com/wzqshb/p/14305905.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/wzqshb/p/14305905.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗