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. Asp.net Session 保存到MySql中

    一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...

  2. Tara's Beautiful Permutations 组合数学

    https://www.hackerrank.com/contests/hourrank-15/challenges/taras-beautiful-permutations 首先先统计一下个数为2的 ...

  3. ubuntu 16.04软件源

    来源:模板:16.04source   deb http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted universe multive ...

  4. (转)SqlBulkCopy批量复制数据

    在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们 ...

  5. Device Tree Usage( DTS文件语法)

    http://elinux.org/Device_Tree_Usage Device Tree Usage     Top Device Tree page This page walks throu ...

  6. Linux内核实现中断和中断处理(二)

    第一部分移步传送门召唤!!:http://www.cnblogs.com/lenomirei/p/5562086.html 上回说了Linux内核实现中断会把中断分为两部分进行处理,上回讲了上部分,这 ...

  7. CityEngine中动态水的实现

    地址:http://pan.baidu.com/share/link?shareid=3871210059&uk=3492170216 密码:am5b 在今年Esri全球用户大会和Esri中国 ...

  8. opencv学习_15 (利用cmake查看opencv的源码)

    当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCr ...

  9. (mysql)Packet for query is too large

    http://jingyan.baidu.com/article/fb48e8be3f81716e622e14ee.html windows如何重启mysql 开始->运行->cmd 停止 ...

  10. java8的接口新特性(可以有方法体的接口)(转)

    以前Java的接口中定义的方法不可以有方法体,这样试用起来,有时候听不方便的,当有多个类实现了想同的接口,接口中某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码(或者说co ...