加快ALTER TABLE 操作速度
来源:互联网 发布:淘宝外卖在哪里 编辑:程序博客网 时间:2024/05/21 14:09
mysql的alter table操作的性能对于大表来说是个大问题。mysql大部分修改表结构操作的方法都是用新的结构创建一个
新表,从旧表中查出数据插入新表,然后在删除旧表。这样的操作很耗费时间,而且还有可能中断mysql服务。
这里推荐一种方法来提高alter table的操作速度。(请注意数据备份)
修改数据表的.frm文件,步骤如下:
1、创建一个有相同结构的新表,并进行所需修改(例如增加ENUM常量值)。
2、执行FLUSH TABLES WITH READ LOCK.加锁禁止打开所有表。
3、交换新表和旧表的.frm文件。
4、执行UNLOCK TABLES解锁。
新表,从旧表中查出数据插入新表,然后在删除旧表。这样的操作很耗费时间,而且还有可能中断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 | |+-------------+---------------------+------+-----+---------+----------------+
0 0
- 加快alter table 操作速度
- 加快ALTER TABLE 操作速度
- 加快ALTER TABLE操作的速度
- MySQL加快ALTER TABLE操作的速度
- mysql(一)加快ALTER TABLE操作的速度
- 高性能MYsql读书笔记-加快alter table操作的速度
- 高性能mysql笔记(五)加快alter table的速度
- mysql alter table 操作
- 加快软盘操作速度的汇编程序源代码
- 加快文件或文件夹打开操作速度
- alter table
- ALTER TABLE
- Alter Table
- Alter table
- alter table
- ALTER TABLE
- alter table
- alter table
- python资料收藏
- solr查询语法
- jQuery技术解密
- AJAX提交与FORM提交的区别说明
- 数据表或记录被锁住,解锁方法
- 加快ALTER TABLE 操作速度
- 字符串处理函数strcat和strtok
- 函数指针及其应用
- php类文件的自动加载机制
- #define命令的一些高级用法
- Django 1.7 发布
- 2014鹰目之光创意大赛再次带来广告创意风暴
- Ajax与传统表单提交的区别
- JDK和JRE的区别