学习MySQL,怎么能不会数据类型和schema优化( 三 )


在使用缓存表和汇总表时 , 必须决定是实时维护数据还是定期重建 , 这取决于我们的需求 。 定期重建相比实时维护 , 能节省更多的资源 , 表的碎片更少 。 而在重建时 , 我们仍需保证数据在操作时可用 , 需要通过“影子表”来实现 。 在真实表后创建一张影子表 , 当填充好数据后 , 通过原子的重命名操作来切换影子表和原表 。
学习MySQL,怎么能不会数据类型和schema优化文章插图
加快ALTER TABLE操作的速度当 MySQL 在执行 ALTER TABLE 操作时 , 往往是新建一张表 , 然后把数据从旧表查出并插入到新表中 , 再删除旧表 , 如果表很大 , 这样需要花费很长时间 , 且会导致 MySQL 的服务中断 。 为了避免服务中断 , 通常可以使用两种技巧:

  1. 在一台不提供服务的机器上执行 ALTER TABLE 操作 , 然后再与提供服务的主库进行切换;
  2. “影子拷贝” , 建立一张与原表无关的新表 , 在数据迁移完成后 , 通过重命名操作进行切换 。
但也不是所有的 ALTER TABLE 操作会引起表重建 , 例如在修改字段的默认值时 , 使用 MODIFY COLUMN 会进行表重建 , 而使用 ALTER COLUMN 则不会进行表重建 , 操作速度很快 。 这是因为 ALTER COLUMN 在修改默认值时 , 会直接修改了存在表的.frm文件(存储字段的默认值) , 而并未重建表 。
参考
  1. 《高性能MySQL》
  2. MySQL DECIMAL 数据类型()

学习MySQL,怎么能不会数据类型和schema优化文章插图
学习MySQL,怎么能不会数据类型和schema优化文章插图
学习MySQL,怎么能不会数据类型和schema优化文章插图
点分享
学习MySQL,怎么能不会数据类型和schema优化文章插图
学习MySQL,怎么能不会数据类型和schema优化文章插图