设为首页
收藏本站
淘宝精选
开启辅助访问
登录
注册后绑定Q登陆
手机号登录
手机号码,快捷登录
微信登录
QQ登录
快捷导航
发布信息
搜索
搜索
支持我们
使用96IE来支持论坛
首页
任务
勋章
签到
签到等于每天打卡
导读
邀请码
装机必备的软件、去广告版
装机助手
装机网
精品操作系统下载
免费邀请码
记录
Doing
每日签到
本版
帖子
用户
PCOS技术网
»
首页
›
≡技术交流≡
›
电脑技术交流
›
alter超大表的效率问题
返回列表
发新帖
查看:
552
|
回复:
2
alter超大表的效率问题
[复制链接]
amwdnuff
amwdnuff
当前离线
积分
10395266
IP卡
狗仔卡
签到天数: 2626 天
连续签到: 5 天
[LV.Master]至尊海神IIIIII
发表于 2009-8-30 09:52
|
广东
|
显示全部楼层
|
阅读模式
alter超大表的效率问题
首先,分析以下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;
PCOS系统下载站:http://zhuangji.wang
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
抢沙发
千斤顶
显身卡
amwdnuff
amwdnuff
当前离线
积分
10395266
IP卡
狗仔卡
签到天数: 2626 天
连续签到: 5 天
[LV.Master]至尊海神IIIIII
楼主
|
发表于 2009-8-30 09:52
|
广东
|
显示全部楼层
alter超大表的效率问题
alter超大表的效率问题
首先,分析以下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;
PCOS系统下载站:http://zhuangji.wang
回复
支持
反对
使用道具
举报
显身卡
amwdnuff
amwdnuff
当前离线
积分
10395266
IP卡
狗仔卡
签到天数: 2626 天
连续签到: 5 天
[LV.Master]至尊海神IIIIII
楼主
|
发表于 2009-8-30 09:52
|
广东
|
显示全部楼层
alter超大表的效率问题
alter超大表的效率问题
首先,分析以下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;
PCOS系统下载站:http://zhuangji.wang
回复
支持
反对
使用道具
举报
显身卡
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册后绑定Q登陆
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页