Mysql 对大表执行扩列和加索引


Mysql 对大表执行扩列和加索引

背景

生产上有一个表的总数已经大于 3000W 条。在预发环境测试增加列和索引脚本的时候发现,执行速度特别慢。 最后使用了在线 DDL 的功能由原来的几个小时缩小到了半个小时。

解决方法

ALTER TABLE t1 ADD COLUMN x INT, ALGORITHM=INPLACE, LOCK=NONE;

通过 LOCK 子语句和 ALGORITHM 来避免创建和删除索引所带来的表复制行为,从而提高了效率

根据我的个人理解 LOCK 才是提高效率的关键,当选择 LOCK=none 的时候,这个表就允许 DML 语句的执行,和并发查询。 ALGORITHM 是用来做旧表复制行为的备份,防止在执行的时候遇到问题。

参考链接

在线 DDL

  #code 

« Netty 系列 ———— (五) 自定义编码解码器 Apollo 系列 ———— (一) 部署 Apollo »
blog comments powered by Disqus