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

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过程中的锁表,可以在业务空闲的凌晨晚上进行处理)。

时间: 2024-07-28 19:12:38

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

MySQL和Oracle的添加字段的处理差别

昨天在微信群中有个朋友也是无意中问了一下,说数据库中的表字段想保持一种相对规范的顺序,怎么办?要知道Oracle中这个操作就比较纠结了,因为是按照追加的方式来处理的.没法在已有的字段1,字段2中间添加一个字段3.但是MySQL却可以,这个方面MySQL看起来要灵活的多,这个是什么原因呢,他们在设计上有什么差别呢. MySQL中对每个表存在一个定义文件,即frm文件,我们来取出一个表,看看能不能简单解析一下. 比如一个表字段的内容如下: > desc zd_warshrine_prostate;

mysql 的列类型,增加更新表字段

#列类型 mysql 三大列类型 数值型 tinyint 占据空间 1字节 8个位 存储范围,-128-127,0-255 0-2^8 0-255 -2^7 2^7-1 smallint mediuint int bigint int系列声明时的参数 (M) unsigned zerofill 分析M参数 M表示补0宽度 M必须和zerofill配合才有意义, zerofill 表示的unsigned alter table calss add snum smallint(5) zerofill

mysql alter 修改字名 表名 结构 增加列

mysql教程 alter 修改字名 表名 结构 增加列 alter table 语句 alter table 语句用于在已有的表中添加.修改或删除列. sql alter table 语法 如需在表中添加列,请使用下列语法: alter table table_name add column_name datatype 要删除表中的列,请使用下列语法: alter table table_name drop column column_name 注释:某些数据库教程系统不允许这种在数据库表中删

数据库-Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升

问题描述 Oracle中重复率很高的字段创建B树索引,为什么性能可以得到大幅提升 请教一个让我不解的问题: 我有一张表TT,数据大概是240W,其中的一个字段COL1的值只有'0'和'1'两个.现在有如下查询:SELECT COL2,SUM(NVL(COL3,0) * nvl(COL4,0)) FROM TT WHERE COL1 = '0' GROUP BY COL2; 在查询耗时大概是 50s. 为了提高性能,在TT表的COL1字段上创建了位图索引,查询耗时变为 2s 但是由于我需要对TT表

mysql增加新用户无法登陆解决方法_Mysql

今天安装openstack folsom版本,安装完mysql,为各个服务增加对应的数据库和用户后,发现 无法使用新增的用户登陆mysql.我增加用户的方法如下: mysql -uroot -p$MYSQL_PASS <<EOF CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$MYSQL_PASS'; CREATE DATABASE glance; GRANT ALL PRIV

mysql 增加修改字段类型及删除字段类型_Mysql

MySQL添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` (在哪个字段后面添加) 删除字段: alter table `user_movement_log` drop column Gatewayid 调整字段顺序: ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int

代码-MySql动态行转列,网上找的sql语句,需要再添加字段,求帮忙谢谢大家

问题描述 MySql动态行转列,网上找的sql语句,需要再添加字段,求帮忙谢谢大家 SELECT -> IFNULL(c1,'total') AS total, -> SUM(IF(c2='B1',c3,0)) AS B1, -> SUM(IF(c2='B2',c3,0)) AS B2, -> SUM(IF(c2='B3',c3,0)) AS B3, -> SUM(IF(c2='B4',c3,0)) AS B4, -> SUM(IF(c2='total',c3,0))

字段-Oracle数据库两个列合并一个列

问题描述 Oracle数据库两个列合并一个列 将Oracle两个列合并成一个列 SQL怎么写? 比如 有一张表n 字段 a b 1 4 2 5 3 6 合并后为 c 1 2 3 4 5 6 解决方案 select A from n union select B from n 解决方案二: select a as c from n union all select b from n 解决方案三: select concat(n.a,n.b) from n; 解决方案四: select a||b f

access-如何解决数据库删除字段提示输入参数值

问题描述 如何解决数据库删除字段提示输入参数值 以前学过编程都忘了,现在需要用,别人的简单会员管理数据库,删了些字段,提示输入参数值, 如何解决数据库删除字段提示输入参数值 给个教程也行 主要功能是,a表 姓名 , 性别 ,年龄 b表 姓名 , 消费 张三 ,10元 李四 , 20元 张三 , 30元 a表输入数据时,b表同时生成,姓名字段,只手动添加消费字段数值