MySQL上百万条数据怎么加字段跟索引 |
您所在的位置:网站首页 › sql设置索引但不是字段怎么办呢 › MySQL上百万条数据怎么加字段跟索引 |
MySQL上百万条数据怎么加字段跟索引
开发中,数据库加字段属于常规操作,加完字段如果牵扯到查询的话最好还得加索引,如果数据只有几千条或者几万条可以直接执行sql添加字段跟索引,但是如果碰到上百万上千万条数据,那就不能用这种方式了,因为加字段和索引都会锁表,会影响接口服务不可用 因此,在保证对接口影响最小的情况下可以使用下面这种方式:思路是新建一个在原表结构上添加新字段及新索引的新表结构,然后插入原表的数据,修改原表表名,紧接着修改新表表名,改表名速度很快,因此对接口服务的影响会降低到忽略不计,操作过程如下: #原表结构 CREATE TABLE `formal_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `warning_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '故障数量', `pic_num` int(11) unsigned NOT NULL COMMENT '图片数量', `event_ids` text NOT NULL COMMENT '相关事件ids', `user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '执行人id', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间戳', `del_state` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态:1正常 2删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1010869 DEFAULT CHARSET=utf8 COMMENT='任务记录表'; #新表结构,添加state字段及相关索引 CREATE TABLE `formal_table_new` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `warning_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '故障数量', `pic_num` int(11) unsigned NOT NULL COMMENT '图片数量', `event_ids` text NOT NULL COMMENT '相关事件ids', `state` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '事件状态:1已处理 2未处理', `user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '执行人id', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间戳', `del_state` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态:1正常 2删除', PRIMARY KEY (`id`), KEY `union_index` (`del_state`,`state`) USING BTREE COMMENT '联合查询索引' ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='任务记录表'; #给新表插入原表数据 insert into formal_table_new select * from formal_table; #将原表改为formal_table_old ALTER TABLE formal_table RENAME TO formal_table_old; #将新表名改为原表 ALTER TABLE formal_table_new RENAME TO formal_table;对照旧表formal_table_old跟新表formal_table是否有不一致的数据,没有的话删除formal_table_old drop table formal_table_oldOK,表结构调整完毕 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |