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. JAVA学习<六>

    1.Java中的局部变量和成员变量: 2.变量同名,优先方法的局部变量. 3. 4.构造方法: 5.Java 中的 static 使用之静态变量: Java 中被 static 修饰的成员称为静态成员 ...

  2. log4net配置与初始化

    1.配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration>   &l ...

  3. Android Preference使用

    Android Preference经常使用在例如设置的功能,Android提供preference这个键值对的方式来处理这种情况,自动保存这些数据,并立时生效,这种就是使用android share ...

  4. Activity使用startActivityForResult时出现onActivityResult()不执行的问题

    通过使用 startActivityForResult() 和 onActivityResult() 方法可以在Activity之间传递或接收参数.但有时候我们会遭遇onActivityResult( ...

  5. PostGreSQL存储过程

    1 返回结果集的存储过程 -- drop FUNCTION getall();CREATE or REPLACE FUNCTION getall() RETURNS SETOF users  AS$B ...

  6. js 判断字符为空

    function checkIsNull(value){ if(typeof value=='undefined'){ return true; } if(value==null){ return t ...

  7. Linux下cutecom使用USB转串口线

    http://www.cnblogs.com/pang123hui/archive/2011/05/29/2309888.html 在Linux下的串口调试一直使用minicom,虽说Linux的精髓 ...

  8. #import、#include、@class、@protocol、@interface

    #include 它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.(注意重复引用) #import 是Objective-C针对#include的改进版本,确保引用的文件只会被引 ...

  9. JS-定时器换背景

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  10. Jade之Template Inheritance

    Template inheritance jade支持通过关键字block和extends来实现模板继承. 比如,在layout.jade写上如下代码 html head title My Site ...