mysql alter innodb_为InnoDB的ALTER TABLE优化MySQL

你需要更仔细地考虑你的要求。

在最简单的层面,获得表更改的“最快”方法是尽可能少地使用ALTER TABLE语句,最好是一个。这是因为MySQL复制表的数据以更改模式并做出15次更改,而单个副本显然(并且实际上)比将表复制十五次更快,从而一次更改一次。

但我怀疑你要问如何做这种变化与最少的停机时间。我将这样做,你基本上合成的方式非块ALTER TABLE将工作。但它有一些额外的要求:

>您需要一种方法来跟踪添加和更改的数据,例如后者的“修改”日期字段,或前者的AUTO_INCREMENT字段。

>您需要空间在数据库上具有两个表的副本。

>您需要一个时间段,其中对表的更改不会超过快照

基本的技术是你建议的,即使用INSERT INTO … SELECT ….至少你在前面,因为你从一个InnoDB表开始,所以SELECT不会阻塞。我建议对新的空表执行ALTER TABLE,这将保存MySQL复制所有数据,这意味着您需要在INSERT INTO … SELECT …语句中正确列出所有字段。然后你可以做一个简单的RENAME语句来交换它。然后你需要做另一个INSERT INTO … SELECT … WHERE …也许一个UPDATE … INNER JOIN … WHERE …来获取所有修改的数据。您需要快速执行INSERT和UPDATE,否则代码将开始向快照添加新行和更新,这会干扰您的更新。 (如果你可以将你的应用程序进入维护模式几分钟从RENAME之前,你不会有这个问题。)

除此之外,还有一些关键和缓冲区相关的设置,你可以更改只是一个会话,可以帮助主要数据移动。像read_rnd_buffer_size和read_buffer_size这样的函数会增加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值