余温旧梦-王世彪的博客
关注公众号
  • 开发桌面程序
  • javascript教程
  • css样式
  • vuejs
  • 部署免费CDN
  • SEO搜索引擎优化
  • vuepress教程
  • redis分布式缓存
  • Golang
  • PHP
  • Python
  • Java
  • NodeJs
  • tomcat
  • ELK
  • Mysql数据库
  • Nosql数据库
  • C/C++底层开发
  • 音视频/流媒体
  • linux服务器
  • nginx服务器
  • 容器技术
  • 负载均衡
  • 项目管理
  • 持续集成
  • 大数据
  • 微信公众号运营
  • markdown用法
赞一个
友链
联系作者

王世彪

努力做个影响他人滴人
关注公众号
  • 开发桌面程序
  • javascript教程
  • css样式
  • vuejs
  • 部署免费CDN
  • SEO搜索引擎优化
  • vuepress教程
  • redis分布式缓存
  • Golang
  • PHP
  • Python
  • Java
  • NodeJs
  • tomcat
  • ELK
  • Mysql数据库
  • Nosql数据库
  • C/C++底层开发
  • 音视频/流媒体
  • linux服务器
  • nginx服务器
  • 容器技术
  • 负载均衡
  • 项目管理
  • 持续集成
  • 大数据
  • 微信公众号运营
  • markdown用法
赞一个
友链
联系作者
  • 分布式缓存

  • 分布式存储

  • mysql

    • mysql创建数据库指定编码
    • mysql的事务及事务隔离级别
    • sql审核平台Archery的安装和使用
    • 修改mysql列定义
    • mysql创建用户
    • mysql 常用 json 函数
    • mysql类型转换函数
    • mysql为1张表同时添加多个字段
    • mysql为大表增加字段
      • 1. 使用mysql自带的优化方法
  • postgresql

  • mongodb

  • c或c++

  • golang

  • php

  • java

  • nodejs

  • python

  • tomcat

  • elk

  • 音视频流媒体

  • 后台
  • mysql
王世彪
2021-01-08
目录

mysql为大表增加字段

# mysql为大表增加字段

本文讲述如何为mysql的一张大表快速地增加字段。默认情况下,若对mysql的一张数据量很大的表新增字段时, 会巨慢无比, 执行一个新增字段的语句可能要执行七八个小时,甚至更久,这简直无法接受。那么本文就来总结下为mysql的大表快速增加字段的若干方法。

# 1. 使用mysql自带的优化方法

只需在原有的sql语句基础上补充个参数(用来指定具体算法)即可,不同的mysql版本支持不同的算法,详情可以访问mysql大型表的DDL操作 (opens new window)。

# 5.7版本

如下是在一个真实的线上环境的执行过程。

为了提高执行效率,我已经把数据库写操作的程序暂时停掉了。

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.22-log |
+------------+
1 row in set (0.03 sec)

mysql> select count(1) from news;
+----------+
| count(1) |
+----------+
|   863780 |
+----------+
1 row in set (0.22 sec)

mysql> alter table news add column (
    ->     site_type int(1) default 1 comment '站点类型, 对应site表的type字段',
    ->     img_count int default 0 comment '图片数量',
    ->     nsfw float default 0 comment '鉴黄值: 数值0-1之间,值越大,色情度越高'
    ->     ), ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (11 min 0.59 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select count(1) from news_img;
+----------+
| count(1) |
+----------+
|  4476600 |
+----------+
1 row in set (0.87 sec)

mysql> alter table news_img add column (
    ->     site_type int(1) default 1 comment '站点类型, 对应site表的type字段',
    ->     width int default 0 comment '宽',
    ->     height int default 0 comment '高'
    ->     ), ALGORITHM=INPLACE, LOCK=NONE;

Query OK, 0 rows affected (8 min 24.88 sec)
Records: 0  Duplicates: 0  Warnings: 0

可以看出,对1张86万条数据的表的修改耗时约11分钟,对1张447万条数据的表的修改耗时约8分钟。

#mysql
上次更新: 2021-01-08 01:21:10
mysql为1张表同时添加多个字段
ubuntu linux安装postgresql数据库

← mysql为1张表同时添加多个字段 ubuntu linux安装postgresql数据库→

最近更新
01
mysql创建用户
04-09
02
golang错误处理最佳实践
03-17
03
基于proto文件生成rpc接口定义文档
03-11
更多文章>
Theme by Vdoing | Copyright © 2019-2022 王世彪 | MIT License
冀ICP备19016776号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式