高性能MySQL:加快ALTER TABLE 操作的速度

另外一种方法是通过ALTER COLUMN 注 操作来改变列的默认值 mysql> ALTER TABLE sakila film > ALTER COLUMN rental_duration SET DEFAULT ;这个语句会直接修改 frm 文件而不涉及表数据 所以 这个操作是非常快的 返回目录 高性能MySQL 编辑推荐 ASP NET MVC 框架揭秘 Oracle索引技术 ASP NET开发培训...
高性能MySQL:加快ALTER TABLE 操作的速度
   加快ALTER TABLE 操作的速度
  MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题 MySQL 执行大部分修改表结构操作的方法是用新的结构创建一个空表 从旧表中查出所有数据插入新表 然后删除旧表 这样操作可能需要花费很长时间 如果内存不足而表又很大 而且还有很多索引的情况下尤其如此 许多人都有这样的经验 ALTER TABLE 操作需要花费数个小时甚至数天才能完成
  MySQL 以及更新版本包含一些类型的 在线 操作的支持 这些功能不需要在整个操作过程中锁表 最近版本的InnoDB 注 也支持通过排序来建索引 这使得建索引更快并且有一个紧凑的索引布局
  一般而言 大部分ALTER TABLE 操作将导致MySQL 服务中断 我们会展示一些在DDL操作时有用的技巧 但这是针对一些特殊的场景而言的 对常见的场景 能使用的技巧只有两种 一种是先在一台不提供服务的机器上执行ALTER TABLE 操作 然后和提供服务的主库进行切换 另外一种技巧是 影子拷贝 影子拷贝的技巧是用要求的表结构创建一张和源表无关的新表 然后通过重命名和删表操作交换两张表 也有一些工具可以帮助完成影子拷贝工作 例如 Facebook 数据库运维团队(//launchpad net/mysqlatfacebook)的 online schema change 工具 Shlomi Noach 的openark toolkit(//code openark /) 以及Percona Toolkit(// percona /sofare/) 如果使用Flexviews(参考 节) 也可以通过其CDC 工具执行无锁的表结构变更
  不是所有的ALTER TABLE 操作都会引起表重建 例如 有两种方法可以改变或者删除一个列的默认值(一种方法很快 另外一种则很慢) 假如要修改电影的默认租赁期限 从三天改到五天 下面是很慢的方式

  mysql> ALTER TABLE sakila film
   > MODIFY COLUMN rental_duration TINYINT( ) NOT NULL DEFAULT ;
  SHOW STATUS 显示这个语句做了 次读和 次插入操作 换句话说 它拷贝了整张表到一张新表 甚至列的类型 大小和可否为NULL 属性都没改变
  理论上 MySQL 可以跳过创建新表的步骤 列的默认值实际上存在表的 frm 文件中 所以可以直接修改这个文件而不需要改动表本身 然而MySQL 还没有采用这种优化的方法 所有的MODIFY COLUMN 操作都将导致表重建
  另外一种方法是通过ALTER COLUMN 注 操作来改变列的默认值
  mysql> ALTER TABLE sakila film
   > ALTER COLUMN rental_duration SET DEFAULT ;
  这个语句会直接修改 frm 文件而不涉及表数据 所以 这个操作是非常快的
返回目录 高性能MySQL
编辑推荐
ASP NET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
lishixinzhi/Article/program/MySQL/201311/29672
2022-09-30
mengvlog 阅读 13 次 更新于 2025-06-21 07:33:26 我来答关注问题0
檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部