mysql 一张超级大表,加字段很慢怎么办 20C

假设一张表已经有5000w数据了,现在想加一个字段,加字段特别慢,
并且加字段的同时要停服务,想问下行业上的解决方案是什么,主要还是
加字段速度特别慢的问题,如果能解决不停止服务加字段那就更好了,

希望有人能解决!,谢谢。

6个回答

使用外键再建一张表,这样就可以不用停服务加字段了。

StackTc
StackTc 不停止服务 老数据被更新怎么办
9 个月之前 回复

导出来重命名加好了,吧新的数据放进去,在替换表名,但还是要停一下服务保证新产生数据不丢失

1.升级mysql5.7 在线ddl 可以了解下 https://blog.csdn.net/carry9148/article/details/52640440
2.5000万的表本身已经不正常了,如果是一个在线提供服务给用户的表,不会允许5000万的。一般6-8百万。这时候会进行分表。
3.分表后还有600-800 增加一个字段还需要1分钟,那么选择使用此表人数最少的时候,写一个自动执行脚本。类似凌晨3点。
4.加字段并不需要停止服务。

正确的做法是这样,对于数据量很大的表,需要添加所有或者修改字段的做法是如下:

  • 1.先创建一张一样的表
    create table new_tb like tb_old;
  • 2.修改创建表的字段
    alter table new_tb add COLUMN new_column varchar(32) DEFAULT null;
  • 3.原始数据插入到新的数据表中
    insert into new_tb (字段)  select 字段 from tb_old;

这里需要注意下,你的额insert字段和你查询出来的字段一直,对应顺序也是需要需要一致的,如果你只是修改字段的属性,或者添加了索引之类的,字段数量没用变话,那么直接这样写

    insert into new_tb   select * from tb_old;
  • 4.删除原来的数据表,并且重新命名新的数据表:
    drop table tb_old;
    alter table new_tb rename to tb_old;

如果含有外键约束的换,那么还需要处理下外键。

这几部下来就可以防止修改大量数据表而带来的表锁死情况了。

StackTc
StackTc 你这样做的话,如果我原来的表 数据还是会改变呢。
8 个月之前 回复

-- 创建新表(默认数据的话直接使用,自定义字段类型可以通过新建一个表保存一条旧表的主键ID和你要创建的字段,通过旧表主键关联实现)
create table tb1 as
select t.*, '' as col_new from tb;

-- 删除旧表
drop table tb;

-- 修改表明
ALTER TABLE tb1 RENAME TO tb;

先加字段,然后升级项目功能,这样不用停服务啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于大表加字段
我两个表,交易表300多W,订单表500多W. 需要加几个字段. 直接加快1个小时,都没出来结果. 后咨询了一下. 先建立表结构一样的一张新表table_a_new.新表的索引不需要建立. 然后写入数据insert into table_a_new(col1,col2) select (col1,col2) from table_a 重命名表名 alter table order...
上亿大表加字段
1,先添加字段,设置允许为空 2,设置默认值   --不需要设置默认值可忽略此步骤 3,设置字段为非空
MySQL表字段加索引
添加普通索引(此时Key类型为MUL)ALTER TABLE `table name` ADD INDEX `column` (`column`)例如:ALTER TABLE `poicity` ADD INDEX `delete_flag` (`delete_flag`)添加主键索引(PRIMARY KEY)ALTER TABLE `table name` ADD PRIMARY KEY (`c...
Mysql之pt-online-schema-change在线更新大表加索引
由于目前生产环境中大表比较多,这里选择了一个600M的小表做一次在线测试。 环境:Ubuntu 12.04 mysql版本 :5.6.29-log 表引擎:Innodb 一、pt-online-schema-change介绍       percona 公司提供的一款在线更新表的工具,更新过程不会锁表,也就是说操作alter的过程不会阻塞写和读取。即使如此,建议大家操作前还是先做
SQL优化技巧之超级大表和超级大表的连接优化
关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~ Python大数据与SQL优化笔 QQ群:771686295 https://mp.weixin.qq.com/s/dK1cnJBoe-Is7iLi4py4zA ...
mysql给表的字段加索引
1、添加普通索引ALTER TABLE `table_name` ADD INDEX index_name ( `column` )2、添加主键索引ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 3、添加唯一索引 (UNIQUE)ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 唯一索引在此处
mysql加表注释和字段注释
表注释ALTER TABLE `gd_vedio_comment` COMMENT '科普视频评论表';字段注释ALTER TABLE `gd_vedio_page_list` ADD pushStatus SMALLINT(6) DEFAULT '0'; ALTER TABLE `gd_vedio_page_list` MODIFY COLUMN pushStatus SMALLINT(6) DE
mysql 在表中新加字段、修改字段
添加字段 在某个字段之后新加一个字段: ALTER TABEL xxx ADD column_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '' AFTER xxx; 修改字段 ALTER TABEL xxx MODIFY column_name VARCHAR(32) NOT NULL DEFAULT '' COMMENT '';...
mysql 给表和字段加注释
给表加注释: ALTER TABLE table_name COMMENT='这是表的注释';   给列加注释: ALTER TABLE table_name MODIFY `column_name` datetime DEFAULT NULL COMMENT '这是字段的注释'; 创建表时增加备注: CREATE T
很慢很慢怎么办!!!
数据越来越多,有一个视图,联接了5个表,查询起来超级慢,怎么办?
批量更新大表字段
DECLARE   P_INT NUMBER(19);   p_out NUMBER(19); BEGIN   P_INT := 1;   FOR L_frcode IN (SELECT frcode FROM TCCLIINFOh) LOOP --单个县的数据循环提价     begin       p_out := 1;       FOR L_FCLINID IN (SELE
Mysql的大字段问题
【问题描述】Mysql报错: ERROR 1118 (42000) at line 703: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs 【导
oracle超级大表重建索引
请教个问题,oracle千万级数据量表,已nologging 重建索引,提示temp表空间无法扩展,目前temp表空间大小为120g,可不可以再给temp表空间添加数据文件,重建完索引之后,怎么缩小表空间,释放存储空间。或者有其他更好的方式重建索引
MySQL创建一张日期表
有时候根据业务需求,我们需要获取一个包含全部时间的信息,比如在报表中要求按日期、周、月、年做统计。这时候有一个日期表的话会使工作变得简单一些。 下面介绍在MySQL数据库中创建一个日期表obj_date,该表包含如下五个字段:   [sql] view plain copy CREATE TABLE obj_date (     RepDate date NOT NULL,       ...
mysql 创建带解释的表,给表和字段加注释
1 创建带解释的表 CREATE TABLE groups(    gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增',   gname VARCHAR(200) COMMENT '列注释'   ) COMMENT='表注释'; 2 修改现有列,加上解释 alter table test_data modify colum
大表数据加索引,加字段
这段时间发现一个800W的用户表 查询非常慢,用了orderby ,排序的字段是string的,虽然也加了索引,但效果不理想。由于之前的经验,一张5000W的表,orderby 一个timestamp 字段,只要加了 tree 索引,分页10条的速度也是非常快的,于是决定对这张800W表的 timestamp加索引。但这个表正在运行,有大量的更新,在这个过程停掉服务去处理非常冒险,而且服务是分布式的
对CLOB字段全文索引很慢怎么办?
Select L_FILESEQ,VC_SUBJECT From TB_FILEBODY Where dbms_lob.instr(T_BODY,'机场',1,1)>0rn如下语句检索很慢,20000行的表要检索270秒才能出结果,并且CPU使用是100%,怎么办呀?
Mysql遍历大表
mysql jdbc默认把select的所有结果全部取回,放到内存中,如果是要遍历很大的表,则可能把内存撑爆。 一种办法是:用limit,offset,但这样你会发现取数据的越来越慢,原因是设置了offset,mysql需要将读取位置移动到offset的位置,随着offset增大,取数据也越来越慢; 另外一种办法是:用数据流的方式取数据,这时需要设置: stmt = conn.cr...
mysql大表
我现在有一个表A,数量是4亿+,由于是分区表,以前直接从生产库的表B拷贝相应的月份的分区过来即可!现在要求时间延迟不超过一天,即每晚从表B同步昨天的记录到表A,数量在300w左右。表A有20个字段,存在多个索引,如果插入前不取消索引,插入很慢,300w一个晚上也插入不完;但是如果取消索引,插入完后,重建索引的时间也无法接受,查询需要这些索引。求教有什么方法可以解决,或者重新建立一个新的表结构?
MySQL 大表性能优化
单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIG...
mysql大表重定义
mysql5.6以后的版本,小表直接操作表结构变更即可,如果是大表,那么就避免直接操作,就要使用pt-online-schema-change 工作原理: 原理跟oracle的在线冲定义类似,创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走, 用新表代替原表,默认动作是将原表drop掉。在
mysql语句查询数据过多,加载很慢怎么办
SELECT DISTINCT pl.game_id,pl.playact_id, sv.varvalue,pr.proj_name,un.unit_name,pl.sporters_name,pl.end_time,pl.s_total FROM playact plrnLEFT JOIN system_var sv ON pl.game_id=sv.game_id rnLEFT JOIN project pr ON pl.project_id=pr.project_id AND pl.game_id=pr.game_id rnLEFT JOIN palyact_list pal ON pl.playact_id=pal.playact_id AND pl.game_id=pal.game_id rnLEFT JOIN sporter sp ON pal.sporter_id=sp.sporter_id AND pal.game_id=sp.game_id rnLEFT JOIN units un ON sp.unit_id=un.unit_id AND sp.game_id=un.game_id rnORDER BY pl.playact_no ASCrnrn我这样一个查询居然用了一分半的时间,才一万四千多条数据呢?rn为什么呢?有什么方法解决?
mysql增加表字段
mysql增加表字段
Mysql修改表字段
Mysql修改表字段 修改表中的字段名:alter table [表名] change [旧字段] [新字段] 字段类型;
mysql表字段问题?
我在表里的建的字段长度为varchar(60),可是在程序里却只能输三个字段这是为什么啊? 如何解决啊? 我搞了一个小时了还没结果,火死了.
mysql表字段查询
下文中的?表示数字,我有一连串realtime_data?的表,这些表是动态生成的,在每个表中有AD?_ID这样的字段,AD?_ID字段有6个,现在我想写一个存储过程,想实现如下功能,rn1、计算并列出每个表中AD?_ID值为00的表字段的个数rn[img=https://img-bbs.csdn.net/upload/201502/04/1423037113_322570.png][/img] rn[img=https://img-bbs.csdn.net/upload/201502/04/1423037128_183732.png][/img]rnrnmysql高手求帮助rn
Mysql增加表字段
Mysql 增加表字段 mysql增加表字段语句如下: alter table orders add column name varchar(20); 示例: mysql> desc orders; +-------------+-------------+------+-----+---------+----------------+ | Field | Type ...
MySQL 加索引 加字段 锁表问题
rnMySQL 加索引 加字段 锁表问题rnrn线上数据库 用的是阿里云 版本是5.6的rnrn前两天 给文章表某个字段加注释 表竟然锁死了 (后来杀掉进程才恢复)rnrn今天 给一张有4W条记录的表加唯一索引 也锁死了 卡了大约30分钟 也没执行成功rnrn请问这是什么问题? 之前在网上看到说5.6之前的mysql才会有这种问题 就是加字段阻塞rnrn另外 网站有爬虫 一直会向同库的另一张表写入数据 是否跟这个有关系
LINUX下给表加字段
mysql>mysql -h127.0.0.1 -uroot -pabcd123 mysql>use 数据库 mysql>alter table wx_pageinterim_hot add column  is_top int(11) default 0;
表中加字段加不上去
为什么在一个有100来万条数据的表中加一个新字段老是加不上去。
rail 生成表、加字段
创建表方法: rails generate model Experts 在db/migrate/2019xxx_create_experts.rb 文件中, class CreateExperts < ActiveRecord::Migration def change create_table 'experts' do |t| t.string 'name' ...
急,在表中在加字段!
急,在表中在加字段!
dbase表加字段,help
我给一个Dbase表加字段,总是出错,在网上查了半天也没找到有关dbase的资料。rn只好来这里问。rn with Query1 do beginrn close;rn DatabaseName:='d:\test';rn sql.Clear;rn sql.Add('alter table testtable add nsize number(10);');rn execsql;rn end;rnexecsql执行错误,insufficent memoryrn怎么回事?rn
给表字段加随机数
怎么给一个表加个字段,字段值是一个以内的随机数rn一个一百以内的随机数rn
如何实现为大表加一字段?
现在一大表必须加一字段,可是我在企业管理器和查询分析器中实现时都死了,半个多小时没动静,请各位支支招,谢了
mysql中的有没有关于表的超级表?
我想查找特定的表,show tables的输出太多了。。。
如何设计一张千万级别的大表
1、数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节;  2、数据项:是否有大字段,那些字段的值是否经常被更新;  3、数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等;  4、数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中;  5、SQL量的统计比,如:SELECT:UPDATE+DE
mysql为字段加索引
1、添加普通索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 案例:ALTER TABLE ts_storage_partinfo_order_batch ADD INDEX IDX_ISB (id_source_bill); 2、添加主键索引 ALTER TABLE `table_name` ADD PRIMAR...
mysql字段加反引号的目的
mysql字段加反引号的目的 https://www.cnblogs.com/yangzailu/p/6694000.html https://blog.csdn.net/youcijibi/article/details/77965487?locationNum=7&fps=1 p...
mysql字段内容前面加/
update `table` set titlpic=concat("/",titlpic);
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制