博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加快ALTER TABLE 操作速度
阅读量:5887 次
发布时间:2019-06-19

本文共 2947 字,大约阅读时间需要 9 分钟。

mysql的alter table操作的性能对于大表来说是个大问题。mysql大部分修改表结构操作的方法都是用新的结构创建一个
新表,从旧表中查出数据插入新表,然后在删除旧表。这样的操作很耗费时间,而且还有可能中断mysql服务。
这里推荐一种方法来提高alter table的操作速度。(
请注意数据备份
修改数据表的.frm文件,步骤如下:
1、创建一个有相同结构的新表,并进行所需修改(例如增加ENUM常量值)。
2、执行FLUSH TABLES WITH READ LOCK.加锁禁止打开所有表。
3、交换新表和旧表的.frm文件。
4、执行UNLOCK TABLES解锁。

语句实例:修改列user_status

mysql> desc users;+-------------+---------------------+------+-----+---------+----------------+| Field       | Type                | Null | Key | Default | Extra          |+-------------+---------------------+------+-----+---------+----------------+| user_id     | int(11) unsigned    | NO   | PRI | NULL    | auto_increment || user_name   | char(125)           | NO   |     | NULL    |                || user_pass   | char(32)            | NO   |     | NULL    |                || user_status | enum('0','1')       | NO   |     | NULL    |                || user_type   | tinyint(2) unsigned | NO   | MUL | 0       |                |+-------------+---------------------+------+-----+---------+----------------+mysql>create table users_tmp like users;mysql>alter table users_tmp modify column user_status enum ('0','1','2') default '2';mysql>desc users_tmp;+-------------+---------------------+------+-----+---------+----------------+| Field       | Type                | Null | Key | Default | Extra          |+-------------+---------------------+------+-----+---------+----------------+| user_id     | int(11) unsigned    | NO   | PRI | NULL    | auto_increment || user_name   | char(125)           | NO   |     | NULL    |                || user_pass   | char(32)            | NO   |     | NULL    |                || user_status | enum('0','1','2')   | YES  |     | 2       |                || user_type   | tinyint(2) unsigned | NO   | MUL | 0       |                |+-------------+---------------------+------+-----+---------+----------------+mysql>flush tables with read lock;
#-----------------------------------这里是shell命令进入mysql的datadir目录交换.frm文件[root@localhost /var/lib/mysql/test/] cp -a users.frm users.frm.backup[root@localhost /var/lib/mysql/test/] mv users_tmp.frm users.frm #这个会直接删除删除新建的表user_tmp#-----------------------------------
mysql>unlock tables;mysql>desc users;+-------------+---------------------+------+-----+---------+----------------+| Field       | Type                | Null | Key | Default | Extra          |+-------------+---------------------+------+-----+---------+----------------+| user_id     | int(11) unsigned    | NO   | PRI | NULL    | auto_increment || user_name   | char(125)           | NO   |     | NULL    |                || user_pass   | char(32)            | NO   |     | NULL    |                || user_status | enum('0','1','2')   | YES  |     | 2       |                || user_type   | tinyint(2) unsigned | NO   | MUL | 0       |                |+-------------+---------------------+------+-----+---------+----------------+

转载于:https://www.cnblogs.com/liuensong/p/10140346.html

你可能感兴趣的文章
服务器 3
查看>>
VC编译EXE在没装VC的电脑上运行出错问题解决!
查看>>
代码风格
查看>>
欲望永恒饥饿(转自学长)
查看>>
IIS发布网站出现“未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。”的解决方法...
查看>>
web.config中配置数据库(多数据)连接的两种方式
查看>>
给图片加上某种颜色的蒙版
查看>>
Spring Boot Hikari
查看>>
Java的进程内缓存框架:EhCache (转)
查看>>
2018年4月13日,祝自己24岁生日快乐!
查看>>
实现一个涂抹擦除效果
查看>>
Unity PhysicsScene测试
查看>>
CSS行高——line-height
查看>>
WPF成长之路------翻转动画
查看>>
Html列表分页算法
查看>>
JS自学笔记03
查看>>
vim 加密(crypt)文本文档
查看>>
理解父类引用指向子类对象
查看>>
BZOJ-2763: [JLOI2011]飞行路线 (SPFA分层图)
查看>>
make、make clean、make install、make uninstall、make dist、make distcheck和make distclean
查看>>