首先,分析以下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

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

  1. mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化

    一.基本用法 1. 增加列 ?1alter table tbl_nameadd col_name type 例如,  给pet的表增加一列 weight, ?1mysql>alter table ...

  2. 记一次MySQL中Waiting for table metadata lock的解决方法

    记一次MySQL中Waiting for table metadata lock的解决方法 参考文章: (1)记一次MySQL中Waiting for table metadata lock的解决方法 ...

  3. MySQL中的alter table操作之add/modify/drop列

    alter table的操作有增加列.删除列和修改列的长度等 create table t1 (c1 int primary key) engine = innodb; // 增加一个列c2 alte ...

  4. [GBase 8s 教程]GBase 8s ALTER TABLE 命令

    在 GBase 8s 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列. 另外你也可以用 ALTER TABLE 命令添加和删除约束. 语法 用 ALTER TABLE 在一张已 ...

  5. php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解

    <PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...

  6. postgresql表中间加列_PostgreSQL ALTER TABLE命令

    PostgreSQL的ALTER TABLE命令用来添加,删除,或修改现有表中的列. www.yiibai.com 还可以使用ALTER TABLE命令添加和删除现有表上的各种制约因素. yiibai ...

  7. MySQL基础知识——ALTER TABLE

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 ALTER TABLE的作用 ALTER TABLE命令用于添加.删除或者更改现有数据 ...

  8. MySQL建表(create table)命令详解

    MySQL建表(create table)命令详解 create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create t ...

  9. mysql中Prepare、execute、deallocate的使用方法

    mysql中Prepare.execute.deallocate的使用方法 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执 ...

  10. MySQL中查询字段为空或者为null方法

    MySQL中查询字段为空或者为null方法 判断为null select * from table where column is null; 不为null: select * from table ...

最新文章

  1. c# webBrowser打开pdf问题
  2. unity渲染层级关系小结
  3. python函数定义与使用
  4. C++ 虚基类和抽象类关系
  5. DOM-4 【utils/待讲评】节点创建删除、元素属性设置获取、节点属性
  6. 推荐VSCode12个比较实用的插件
  7. 设计模式09----门面设计模式
  8. CodeForce 2A —— Winner
  9. 网易架构师深入讲解Java开发!BAT等大厂必问技术面试题
  10. Android 8.0学习 (2)---Android HAL
  11. python反向切片_Python-关于反向切片的小问题
  12. openstack neutron(tap、qvb、qvo详解)(转)
  13. [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
  14. SSH 工具 PuTTY 最新官方下载地址及教程
  15. WX系列无线漫游的配置
  16. IDEA项目启动配置
  17. AAC 音频格式详解
  18. 京东QQ都没有的牛轰特效、两个ListView联动效果,不用stickyheaderlistview,
  19. 别踩白块儿游戏代码html,别踩白块儿HTML版的第二天
  20. vendor分区的库无法调用system分区的库

热门文章

  1. web微信授权登陆-配置篇
  2. 计算机如何设置多用户,windows7远程桌面多用户连接怎么设置_win7远程桌面如何设置多人登录-win7之家...
  3. 网页上的内容无法复制和下载?一行代码教你解决
  4. 将自己的图片做成cityscape格式(自用)
  5. C语言保留字(关键字)汇总——转载
  6. 批量替换角标,为角标添加中括号
  7. Python.PyAutoGUI.利用手机模拟器破解Yousee密码
  8. 欧拉坐标与拉格朗日坐标
  9. Vue 数组/对象赋值,视图不更新问题
  10. Qt5+vs2017 UI界面添加新控件后,提示没有类成员