paip.解决 数据库mysql增加列 字段很慢添加字段很慢

#环境如下:

mysql5.6    数据仅仅3w

alter table xxx add column yyy int default 0;

添加字段很慢,好几份中都没有好。。



#原因以及解决

[SQL] alter table grejx_def add column flag12 int default 0;

受影响的行: 0

不是那种lock--copoy--rewrite的方式.effeic row sh 0 ,为甚还是这么慢的是??

Oracle 11g的快速加字段功能就是好啊..



数据结构紊乱兰,只要不个table 优化给挂走ok兰。。

字谣0.3s走ok兰..



作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax



#mysql数据库添加字段或者修改结构过程如下

由于mysql在线ddl(加字段、加索引等修改表结构之类的操作)过程如下:



 A.对表加锁(表此时只读)

B.复制原表物理结构

C.修改表的物理结构

D.把原表数据导入中间表中,数据同步完后,锁定中间表,并删除原表

E.rename中间表为原表

F.刷新数据字典,并释放锁







添加字段很慢

alter table grejx_def add column flag int default 0;



#大的数据哈的解决

##停掉mysql服务器来修改表结构。然后进行滚动式更新

Facebook数千台MySQL服务器在过去增加个索引需要几个月的滚动升级(后来他们自己开发了后面提到的工具,只需要几天)





##在加字段之前进行测验mysql是否复制表,以减低应用卡死的风险:

在命令结束之后看看显示“rows affected “的值。例如,这里您可能会看到在做不同类型的DDL操作:



拷贝表结构,然后插入少量的数据。去修改表结构。看影响的行。如果为0,则表示不会拷贝中间表的方式



##关于online-schema-change



是percona推出的一个针对mysql在线ddl的工具



#新的思路(手动执行mysql的过程)

1:手动的创建好修改后的表结构 NEW_TAB。(比如新增字段,修改表字段类型。删除表字段,可以一并一次性搞定)

对于MyISAM表,您可以通过把myisam_sort_buffer_size系统变量设置到一个较高的值,来加快重新创建索引(该操作是变更 过程中速度最慢的一部分)的速度。

2:   选择性的将旧表OLD_TAB数据插入到修改后的表。(这里需要注意的是海量数据的处理。可以将表记录按照主键分批进行插入处理,其实在如果分表处理的话,在业务代码中也是可以进行修改处理的,分而治之。)



3:rename表名称。 (这里需要注意的是RENAME过程中的锁表,可以在业务空闲的凌晨晚上进行处理)。



#参考

mysql在线修改表结构大数据表的风险与解决办法归纳 - 王滔 - 博客园.htm

一个资料介绍online-schema-change这个工具,

MYSQL 在线DDL操作是否copying data - zuoxingyu - 博客园.htm

paip.解决 数据库mysql增加列 字段很慢添加字段很慢的更多相关文章

  1. MySQL增加列,移动列

    ALTER TABLE test ADD COLUMN id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY FIRST 给表添加列是一个常用的操作, ...

  2. mysql 增加列,修改列名、列属性,删除列语句

    mysql增加列,修改列名.列属性,删除列语句 mysql修改表名,列名,列类型,添加表列,删除表列     alter table test rename test1; --修改表名 alter t ...

  3. Android GreenDAO 3.0 不修改版本号的情况下增加、删除表、添加字段

    最近项目中使用了GreenDAO的3.0以上的版本,出现需要增加删除表的需求,刚开始用,发现官方对增加和删除的方法是每次去修改数据库版本号,版本一旦升级,那么原来数据库中的表会全部删除再重建.太麻烦, ...

  4. mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题

    导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...

  5. MySQL查询列必须和group by字段一致吗?

    @ 目录 场景:查询各部门薪水最高的员工. 方法一: 方法二: MySQL group by是如何决定哪一条数据留下的? 分组前的数据: 那么target list和group by column不匹 ...

  6. -A 解决数据库表太多,预读表时间很长

    Reading table information for completion of table and column names You can turn off this feature to ...

  7. 解决数据库mysql插入乱码问题

    当我们遇到mysql乱码问题的时候,一般要修改my.ini文件: 我遇到的是两个版本,一个是mysql5.5版本,另一个是mysql5.7 5.5的是在这个目录下面:C:\Program Files\ ...

  8. MySQL增加列,修改列名、列属性,删除列

    mysql修改表名,列名,列类型,添加表列,删除表列 alter table test rename test1; --修改表名 alter table test add  column name v ...

  9. MYSQL实现列拼接,即同一个字段,多条记录拼接成一条

    一.首先,新建三张表 DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `id` ) unsigned NOT NULL AUTO_IN ...

随机推荐

  1. DataGridView控件“至少有一列没有单元格模板”问题处理

    这个问题一般是没有设置单元格模板造成的. mdgv.Columns[].CellTemplate = new DataGridViewTextBoxCell();

  2. JS之延迟处理

    $(document).ready(function () { $("#zidong3,#zidong1").click(function () { $("#zidong ...

  3. java多线程学习-ThreadLocal

    为了凑字,把oracle文档里介绍ThreadLocal抄过来 public class ThreadLocal<T> extends Object This class provides ...

  4. nil、Nil、NULL和NSNull的区别和联系

    一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对 ...

  5. ini_set 设置php配置项 在windows和linux下的不同

    在win下,当你要include多个路径的话,你要用“:”隔开,但在linux下就使用":"隔开的.. if (substr(php_uname(), 0, 7) == " ...

  6. $("<div />")代表的意思

    $("div")这个是匹配所有叫div的标签. $("<div />")表示生成一个div节点,但是div节点一般不通过这种方式,<div/& ...

  7. linux 搭建jenkins+创建maven工程JOB

    1.linux 安装jenkins 网上搜到这样安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redh ...

  8. 【半平面交】bzoj2618 [Cqoi2006]凸多边形

    #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...

  9. How to do logging in C# with log4net

    If you are writing server code in C# or to a lesser extent desktop/client then it's a good idea to i ...

  10. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...