MySQL中的alter table命令的基本使用方法及提速优化
首先,分析以下alter一个超大表低效率的原因:
1. mysql中alter表的机制是:创建一个符合alter目标的表,然后把数据全部插入到新表中,然后删除老表。
2. 在数据迁移时,每插入一行,需要对索引进行一次更新。效率低下且会产生索引碎片
3. 当没有足够的内存,或者表上的索引非常多时,效率十分的低下。
避免方式:
1. 使用正确的alter语句
如露alter的目标是更改某列的default值。mysql有特定的语句只对frm文件进行操作,而不更新index和data。
错误的方式:alter table tbl_name modify column col1 int not null default 5;
正确的方式:alter table tbl_name alter column col1 set default 5;
2. 手动的执行alter的机制
首先,create tbl_new like tbl_old;
然后,alter table modify column ...
然后,alter tbl_new disable keys;
---load data---
然后,alter tbl_new enable keys;
最后,rename table tbl_old to tbl_new,tbl_new to tbl_old;
3. 人工修改frm表(危险!!!)
在5.1.36的myisam下,对这种方法进行了测试,并没有成功,会报index corrupted的错误。
首先,create tbl_new like tbl_old;
然后,alter table modify column ...
然后,flush tables with read lock;
接着在shell中将两个表的frm文件互换。
最后,unlock tables;
转载自:http://blog.chinaunix.net/uid-7692530-id-2567591.html
MySQL中的alter table命令的基本使用方法及提速优化相关推荐
- mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
一.基本用法 1. 增加列 ?1alter table tbl_nameadd col_name type 例如, 给pet的表增加一列 weight, ?1mysql>alter table ...
- 记一次MySQL中Waiting for table metadata lock的解决方法
记一次MySQL中Waiting for table metadata lock的解决方法 参考文章: (1)记一次MySQL中Waiting for table metadata lock的解决方法 ...
- MySQL中的alter table操作之add/modify/drop列
alter table的操作有增加列.删除列和修改列的长度等 create table t1 (c1 int primary key) engine = innodb; // 增加一个列c2 alte ...
- [GBase 8s 教程]GBase 8s ALTER TABLE 命令
在 GBase 8s 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列. 另外你也可以用 ALTER TABLE 命令添加和删除约束. 语法 用 ALTER TABLE 在一张已 ...
- php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解
<PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...
- postgresql表中间加列_PostgreSQL ALTER TABLE命令
PostgreSQL的ALTER TABLE命令用来添加,删除,或修改现有表中的列. www.yiibai.com 还可以使用ALTER TABLE命令添加和删除现有表上的各种制约因素. yiibai ...
- MySQL基础知识——ALTER TABLE
点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 ALTER TABLE的作用 ALTER TABLE命令用于添加.删除或者更改现有数据 ...
- MySQL建表(create table)命令详解
MySQL建表(create table)命令详解 create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create t ...
- mysql中Prepare、execute、deallocate的使用方法
mysql中Prepare.execute.deallocate的使用方法 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执 ...
- MySQL中查询字段为空或者为null方法
MySQL中查询字段为空或者为null方法 判断为null select * from table where column is null; 不为null: select * from table ...
最新文章
- c# webBrowser打开pdf问题
- unity渲染层级关系小结
- python函数定义与使用
- C++ 虚基类和抽象类关系
- DOM-4 【utils/待讲评】节点创建删除、元素属性设置获取、节点属性
- 推荐VSCode12个比较实用的插件
- 设计模式09----门面设计模式
- CodeForce 2A —— Winner
- 网易架构师深入讲解Java开发!BAT等大厂必问技术面试题
- Android 8.0学习 (2)---Android HAL
- python反向切片_Python-关于反向切片的小问题
- openstack neutron(tap、qvb、qvo详解)(转)
- [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
- SSH 工具 PuTTY 最新官方下载地址及教程
- WX系列无线漫游的配置
- IDEA项目启动配置
- AAC 音频格式详解
- 京东QQ都没有的牛轰特效、两个ListView联动效果,不用stickyheaderlistview,
- 别踩白块儿游戏代码html,别踩白块儿HTML版的第二天
- vendor分区的库无法调用system分区的库
热门文章
- web微信授权登陆-配置篇
- 计算机如何设置多用户,windows7远程桌面多用户连接怎么设置_win7远程桌面如何设置多人登录-win7之家...
- 网页上的内容无法复制和下载?一行代码教你解决
- 将自己的图片做成cityscape格式(自用)
- C语言保留字(关键字)汇总——转载
- 批量替换角标,为角标添加中括号
- Python.PyAutoGUI.利用手机模拟器破解Yousee密码
- 欧拉坐标与拉格朗日坐标
- Vue 数组/对象赋值,视图不更新问题
- Qt5+vs2017 UI界面添加新控件后,提示没有类成员