高性能mysql读书笔记(一):Schema与数据类型优化

时间:2023-03-09 04:27:13
高性能mysql读书笔记(一):Schema与数据类型优化

4.5 加快ALTER TABLE 操作的速度

原理:

MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题。

MySQL 执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表。这样操作可能需要花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下尤其如此

特点:

  • 大部分ALTER TABLE 操作将导致MySQL 服务中断
  • ALTER TABLE 本质是建新结构的表,从旧表插入数据到新表 (SHOW STATUS 显示这个语句做了1 000 次读和1 000 次插入操作)
  • ALTER table 会锁表,整个表是只读锁定

解决办法:

1:一种是先在一台不提供服务的机器上执行ALTER TABLE 操作,然后和提供服务的主库进行切换;

2:另外一种技巧是“影子拷贝”。影子拷贝的技巧是用要求的表结构创建一张和源表无关的新表,然后通过重命名和删表操作交换两张表。