始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

MySQL 修改表字段优化方案

发布时间:  2012/9/4 17:35:40

要求:现在需要要改一下字段名,增加一个字段,在删除另一个字段,改一个字段类型.

建立如下表(原表):
CREATE TABLE month(
  id INT,
  week VARCHAR(10),
  day VARCHAR(10),
  hour VARCHAR(10),
  PRIMARY KEY (id)-
 

);

得到的最终表为:
CREATE TABLE month(
  id INT ,
  week VARCHAR(10),
  today VARCHAR(20),     -- 把day VARCHAR(10)改为 today VARCHAR(20)
  minute VARCHAR(20),    -- 增加新的字段 minute VARCHAR(20),删除字段hour VARCHAR(10)
  PRIMARY KEY (id)
);


方案1:
ALTER TABLE month CHANGE day today VARCHAR(20);
ALTER TABLE month DROP COLUMN hour;
ALTER TABLE month add minute VARCHAR(20);

案例1 分析:

ALTER TABLE 在MYSQL后台的操作是

1. 新建一临时表
2. 复制数据到临时表
3. 删除原表
4. 更名临时表为原表名

时间主要的消耗在 "复制数据到临时表".

复制数据到临时表这一步,影响时间的因素有,索引维护,数据插入,锁

所以随着修改字段的数目增加,都需要重复以上的操作.当数据量很大时,复制数据到临时表的时间就会更长.

案例2:

CREATE TABLE temp_month(
  id INT,
  week VARCHAR(10),
  today VARCHAR(20),   
  minute VARCHAR(20) DEFAULT '00'  
);

INSERT INTO temp_month(id, week, today) (SELECT id, week, day FROM month);

DROP TABLE month;

ALTER TABLE temp_month RENAME TO month;

ALTER TABLE month ADD PRIMARY KEY(id);

案例2 分析:

自己创建一个临时表,把需要改的字段一次性修改完,用insert对所有修改的字段只用了一次“复制数据”.然后更改表名(更改表名是不需要扫描全表的)

最在后加主键(这样可以避免复制表的过程中,每插入一行数据都要对索引进行的维护操作.最后加索引是一次性对全表进行维护)

===================================================================================

以上两种方案可以看出,随着需要更改的字段的增加.方案2比方案1的速度是单调递增的.

如果使用方案1:建议设置tmp_table_size参数大小,此参数用于系统建立临时表的大小.

建议设置:sort_buffer_size 参数大小,此参数用于排序的缓存.对索引维护会使用到这个参数.

如果你使用表的存储引擎是InnoDB.可以更改innodb_buffer_pool_size(windows:%mysql%/my.ini. linux:/etc/mysql/my.cnf)设置来加快修改的速度.

特别是对于大量数据的表.建议设置大小为内存大小的50%-80%.


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线