我一直在寻找更好的文档,当你改变列定义时,幕后会发生什么。例如,我想将一个列类型从tinyint更改为int,而我的表有400多万条记录。那么,运行alter table change query将锁定表吗?如果是,锁定类型是什么?如有任何资源,敬请谅解,谢谢!
35g0bw711#
需要更改数据存储方式的ALTER TABLE将锁定表、复制数据、重建索引并将新表交换到位。在您的一个示例中,TINYINT占用存储中的1个字节;INT占用4个字节,需要“复制”。在VARCHAR上增加max,至少在保持在255以下时,并不真正需要改变存储,所以它可能只是(并且非常快地)改变表定义,而不复制数据。如果缩小max,则存在截断过长字符串的问题。如果对列进行了索引,则基于类似的考虑,索引可能需要或不需要重建。请参见pt-online-schema-change,了解一种在几乎没有停机时间的情况下使用ALTER创建大型表的方法。
ALTER TABLE
TINYINT
INT
VARCHAR
pt-online-schema-change
ALTER
1条答案
按热度按时间35g0bw711#
需要更改数据存储方式的
ALTER TABLE
将锁定表、复制数据、重建索引并将新表交换到位。在您的一个示例中,
TINYINT
占用存储中的1个字节;INT
占用4个字节,需要“复制”。在
VARCHAR
上增加max,至少在保持在255以下时,并不真正需要改变存储,所以它可能只是(并且非常快地)改变表定义,而不复制数据。如果缩小max,则存在截断过长字符串的问题。如果对列进行了索引,则基于类似的考虑,索引可能需要或不需要重建。
请参见
pt-online-schema-change
,了解一种在几乎没有停机时间的情况下使用ALTER
创建大型表的方法。