MySQL中的alter table命令的基本使用方法及提速优化

首先,分析以下alter一个超大表低效率的原因:
1. mysql中alter表的机制是:创建一个符合alter目标的表,然后把数据全部插入到新表中,然后删除老表。
2. 在数据迁移时,每插入一行,需要对索引进行一次更新。效率低下且会产生索引碎片
3. 当没有足够的内存,或者表上的索引非常多时,效率十分的低下。

避免方式:

1. 使用正确的alter语句
   如露alter的目标是更改某列的default值。mysql有特定的语句只对frm文件进行操作,而不更新index和data。
   错误的方式:alter table tbl_name modify column col1 int not null default 5;
   正确的方式:alter table tbl_name alter column col1 set default 5;

2. 手动的执行alter的机制
   首先,create tbl_new like tbl_old;
   然后,alter table modify column ...
   然后,alter tbl_new disable keys;
   ---load data---
   然后,alter tbl_new enable keys;
   最后,rename table tbl_old to tbl_new,tbl_new to tbl_old; 

3. 人工修改frm表(危险!!!)
   在5.1.36的myisam下,对这种方法进行了测试,并没有成功,会报index corrupted的错误。

   首先,create tbl_new like tbl_old;
   然后,alter table modify column ...
   然后,flush tables with read lock;
   接着在shell中将两个表的frm文件互换。

   最后,unlock tables;


转载自:http://blog.chinaunix.net/uid-7692530-id-2567591.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值